您的位置:首页 > 其它

如何将桌面放大,在显示器上只显示桌面的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"

好了,全部工作都完成了,很容易是不是^_^运行一下试试吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: