不是放大镜那样局部放大,而是整体放大,使显示器显示其中的一部分。
有相关的文章或例子吗?谢谢。

解决方案 »

  1.   

    这个应该不太难吧,获得当前分辨率,按这个大小取桌面的DC1/4大小的区域HBITMAP,再创建个全屏的窗口,放个静态文本控件,其大小为分辨率的大小,最后把刚才那个HBITMAP放大到控件中显示就行了。楼主太懒^_^
    不过要是要求在放大状态下仍允许用户象普通桌面那样可以正常用鼠标、键盘操作的话倒是要费点脑筋。
      

  2.   

    花了一点时间,写了个工程,可以把桌面左上角1/4的区域放大到全屏显示。
    楼主感兴趣的话留下Email,我给你发过去。
      

  3.   

    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();      //测一下我的电脑要花多久才能显示 //获得当前分辨率的大小
     CRect rect(0,0,GetSystemMetrics(SM_CXFULLSCREEN),GetSystemMetrics(SM_CYFULLSCREEN)+GetSystemMetrics(SM_CYCAPTION));
     
     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); 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"