如何将桌面放大,在显示器上只显示桌面的1/4
2006-03-12 23:02
357 查看
我的方法其实很简单,也没用到多少复杂的东西。
1 先建个默认的对话框工程Zoom,在界面上添加一个按钮,在它的实现函数中加入如下代码:
void CZoomDlg::OnZoom()
{
// TODO: Add your control notification handler code here
CZoomWindow showDlg;
showDlg.DoModal();
}
2 给工程新添加一个窗口,去掉它的两个按钮和窗口的“Title bar”风格,并把它的“Border”属性设为“None”,再在上面添加一个CStatic静态文本控件,随便给这个控件改个名,并为它绑定一个CStatic类型的变量:m_static。窗口和控件的大小无所谓,因为我们后面会用代码修改它们的大小。
3 给刚才新建的窗口新建一个派生自CDialog的子类CZoomWindow(在界面中选中这个窗口后按下Ctrl+W键后系统就会提示你加的),并重载基类的虚函数OnInitDialog(),在函数中加入以下代码:
BOOL CZoomWindow::OnInitDialog()
{
CDialog::OnInitDialog();
//DWORD start=::GetTickCount(); //测一下我的电脑要花多久才能显示
LPDEVMODE gpCurrentMode; //用来存储屏幕当前设置的结构指针
gpCurrentMode = new DEVMODE;
//获得当前分辨率的大小和其它信息
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, gpCurrentMode);
gpCurrentMode->dmFields = DM_BITSPERPEL | DM_PELSWIDTH |
DM_PELSHEIGHT | DM_DISPLAYFLAGS | DM_DISPLAYFREQUENCY ;
CRect rect(0,0,gpCurrentMode->dmPelsWidth,gpCurrentMode->dmPelsHeight);
HDC deskdc = ::GetDC(0); //获得桌面DC
HDC hMemDC; //内存DC
HBITMAP hBitmap,hOldBitmap; // 位图句柄
// 选定要放大的区域坐标,这里为左上角1/4大小
int nX=0, nY=0, nX2=rect.Width()/2, nY2=rect.Height()/2;
//为指定DC创建兼容的内存DC
hMemDC = CreateCompatibleDC(deskdc);
// 创建一个与指定DC兼容的位图
hBitmap = CreateCompatibleBitmap(deskdc, rect.Width(), rect.Height());
// 把新位图选到内存DC中
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
// 把屏幕DC放大拷贝到内存DC中
StretchBlt(hMemDC,0,0,rect.Width(), rect.Height(),deskdc,nX,nY,nX2 - nX,nY2 - nY,SRCCOPY);
//得到屏幕位图的句柄
hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
//清除
DeleteDC(hMemDC);
DeleteObject(hOldBitmap);
::ReleaseDC(0,deskdc);
delete gpCurrentMode;
gpCurrentMode=NULL;
MoveWindow(rect); //把窗口全屏显示
m_static.MoveWindow(rect); //同时静态文本控件也全屏显示
m_static.ModifyStyle(0, SS_BITMAP); //改变静态文本控件的风格
m_static.SetBitmap(hBitmap); //显示屏幕位图
/* 下面这段是计算我的电脑(赛扬2G,256M的内存)的时间开销,结果比较慢,要用422~438ms,呵呵,你的呢?
int time=::GetTickCount()-start;
CString str;
str.Format("%d",time);
AfxMessageBox(str);
*/
return TRUE;
}
4 最后,别忘了在工程中ZoomDlg.cpp文件开头加上:
#include "ZoomWindow.h"
好了,全部工作都完成了,很容易是不是^_^运行一下试试吧!
1 先建个默认的对话框工程Zoom,在界面上添加一个按钮,在它的实现函数中加入如下代码:
void CZoomDlg::OnZoom()
{
// TODO: Add your control notification handler code here
CZoomWindow showDlg;
showDlg.DoModal();
}
2 给工程新添加一个窗口,去掉它的两个按钮和窗口的“Title bar”风格,并把它的“Border”属性设为“None”,再在上面添加一个CStatic静态文本控件,随便给这个控件改个名,并为它绑定一个CStatic类型的变量:m_static。窗口和控件的大小无所谓,因为我们后面会用代码修改它们的大小。
3 给刚才新建的窗口新建一个派生自CDialog的子类CZoomWindow(在界面中选中这个窗口后按下Ctrl+W键后系统就会提示你加的),并重载基类的虚函数OnInitDialog(),在函数中加入以下代码:
BOOL CZoomWindow::OnInitDialog()
{
CDialog::OnInitDialog();
//DWORD start=::GetTickCount(); //测一下我的电脑要花多久才能显示
LPDEVMODE gpCurrentMode; //用来存储屏幕当前设置的结构指针
gpCurrentMode = new DEVMODE;
//获得当前分辨率的大小和其它信息
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, gpCurrentMode);
gpCurrentMode->dmFields = DM_BITSPERPEL | DM_PELSWIDTH |
DM_PELSHEIGHT | DM_DISPLAYFLAGS | DM_DISPLAYFREQUENCY ;
CRect rect(0,0,gpCurrentMode->dmPelsWidth,gpCurrentMode->dmPelsHeight);
HDC deskdc = ::GetDC(0); //获得桌面DC
HDC hMemDC; //内存DC
HBITMAP hBitmap,hOldBitmap; // 位图句柄
// 选定要放大的区域坐标,这里为左上角1/4大小
int nX=0, nY=0, nX2=rect.Width()/2, nY2=rect.Height()/2;
//为指定DC创建兼容的内存DC
hMemDC = CreateCompatibleDC(deskdc);
// 创建一个与指定DC兼容的位图
hBitmap = CreateCompatibleBitmap(deskdc, rect.Width(), rect.Height());
// 把新位图选到内存DC中
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
// 把屏幕DC放大拷贝到内存DC中
StretchBlt(hMemDC,0,0,rect.Width(), rect.Height(),deskdc,nX,nY,nX2 - nX,nY2 - nY,SRCCOPY);
//得到屏幕位图的句柄
hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
//清除
DeleteDC(hMemDC);
DeleteObject(hOldBitmap);
::ReleaseDC(0,deskdc);
delete gpCurrentMode;
gpCurrentMode=NULL;
MoveWindow(rect); //把窗口全屏显示
m_static.MoveWindow(rect); //同时静态文本控件也全屏显示
m_static.ModifyStyle(0, SS_BITMAP); //改变静态文本控件的风格
m_static.SetBitmap(hBitmap); //显示屏幕位图
/* 下面这段是计算我的电脑(赛扬2G,256M的内存)的时间开销,结果比较慢,要用422~438ms,呵呵,你的呢?
int time=::GetTickCount()-start;
CString str;
str.Format("%d",time);
AfxMessageBox(str);
*/
return TRUE;
}
4 最后,别忘了在工程中ZoomDlg.cpp文件开头加上:
#include "ZoomWindow.h"
好了,全部工作都完成了,很容易是不是^_^运行一下试试吧!
相关文章推荐
- 如何在windows上使用putty来显示远端linux的桌面
- [other] 如何恢复显示桌面的小图标
- win10如何将此电脑显示在桌面
- 如何解决Windows 8在桌面上总是显示大小写锁定和数字锁定图标的问题
- 如何在windows server 2008的桌面上显示 我的电脑 我的文档 网上邻居?
- 如何恢复“显示桌面”?
- android 如何将桌面和主菜单较长的图标名称显示完整
- Windows 7使用宝典安装技巧篇(7)——如何在Win7桌面上显示“我的电脑”
- 如何在Win10桌面上添加应用图标显示出我们常用的图标
- 请问 Wallpaper Calendar 是如何实现在桌面显示日历和输入数据的????
- 如何在 GNOME 3 中显示桌面
- Android中如何禁用其他应用,并且不在桌面显示
- 如何让IE显示在桌面上
- Win8系统如何在桌面行显示我的电脑
- 如何为Windows 7添加“显示桌面”按钮
- 显示桌面图标不见了如何恢复
- 如何在Linux桌面系统中显示命令提示符的技巧
- Win8如何设置让计算机图标返回桌面默认桌面没有显示
- 如何快速显示桌面
- 20171227-如何让Windows 2012R2显示桌面图标?