如何将桌面放大,在显示器上只显示桌面的1/4

  我的方法其实很简单,也没用到多少复杂的东西。

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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值