加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]MFC截屏之二:截取非屏幕区的窗口(PrintWindow函数的使用)

(2014-08-25 14:53:10)
标签:

转载

PrintWindow函数是截取在屏幕窗口区域外的函数,即截取“移除到屏幕外的窗口”。比如:mfc中要截取隐藏的一个窗口时,我们可以将这个窗口移除到屏幕外,然后用PrintWindow函数进行截取。

下面这是一个win32控制台程序(给出了PrintWindow函数的用法):

#define
_WIN32_WINNT 0x0501 //仅XP或以上系统有效
#include
<windows.h>
int main()
{
   RECT rc;
   HWND hwnd
= FindWindow(TEXT("Notepad"), NULL); //注意窗口不能最小化
   if
(hwnd == NULL)
   {
      cout
<< "找不到记事本窗口" << endl;
     
return 0;
   }
   GetClientRect(hwnd,
&rc);
 
 
//创建
  
HDC hdcScreen = GetDC(NULL);
   HDC hdc
= CreateCompatibleDC(hdcScreen);
   HBITMAP hbmp
= CreateCompatibleBitmap(hdcScreen, rc.right - rc.left, rc.bottom - rc.top);  
   SelectObject(hdc, hbmp);


   //
复制
   PrintWindow(hwnd, hdc, PW_CLIENTONLY);
 
//PW_CLIENTONLYOnly the client area of the window is copied to hdcBlt.
  //By default, the entire window is copied.  
  //PW_CLIENTONLY表示仅仅拷贝窗口的客户区域,而默认情况下,执行printwindow会拷贝整个窗口


 
//复制到粘贴板
   OpenClipboard(NULL);
   EmptyClipboard();
   SetClipboardData(CF_BITMAP, hbmp);
   CloseClipboard();

  //释放
  
DeleteDC(hdc);
   DeleteObject(hbmp);
   ReleaseDC(NULL, hdcScreen);

   cout
<< "成功把记事本窗口复制到粘贴板,请粘贴到Windows画图工具" << endl;

   return
0;
}

执行完上述程序之后,可以打开“附件”-》“画图”->"粘贴",效果图如下:

http://s16/middle/6dd65c6ftb3f674f1917f&690



0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有