1. void screenShot(CRect rect,int left,int top,char *name){//截取窗口的大小,位置,名字(保存在默认路径下)
  2. CBitmap* m_pBitmap; // 加入类成员
  3. CFrameWnd* pMainFrame = (CFrameWnd*)AfxGetMainWnd(); // 获得截图窗口的指针,默认为主窗口,可以更改为其他的窗口。
  4. CPaintDC dc(pMainFrame);
  5.  
  6. m_pBitmap=new CBitmap;
  7. m_pBitmap->CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
  8.  
  9. CDC memDC;
  10. memDC.CreateCompatibleDC(&dc);
  11. CBitmap memBitmap, *oldmemBitmap; // 建立和屏幕兼容的bitmap
  12. memBitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height());
  13.  
  14. oldmemBitmap = memDC.SelectObject(&memBitmap);//将memBitmap选入内存DC
  15. memDC.BitBlt(, , rect.Width(),rect.Height(), &dc,left, top, SRCCOPY); // 调解高度宽度
  16. BITMAP bmp;
  17. memBitmap.GetBitmap(&bmp); // 获得位图信息
  18.  
  19. FILE *fp = fopen(name, "w+b");
  20.  
  21. BITMAPINFOHEADER bih = {}; // 位图信息头
  22. bih.biBitCount = bmp.bmBitsPixel; // 每个像素字节大小
  23. bih.biCompression = BI_RGB;
  24. bih.biHeight = bmp.bmHeight; // 高度
  25. bih.biPlanes = ;
  26. bih.biSize = sizeof(BITMAPINFOHEADER);
  27. bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight; // 图像数据大小
  28. bih.biWidth = bmp.bmWidth; // 宽度
  29.  
  30. BITMAPFILEHEADER bfh = {}; // 位图文件头
  31. bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); // 到位图数据的偏移量
  32. bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight; // 文件总的大小
  33. bfh.bfType = (WORD)0x4d42;
  34.  
  35. fwrite(&bfh, , sizeof(BITMAPFILEHEADER), fp); //写入位图文件头
  36.  
  37. fwrite(&bih, , sizeof(BITMAPINFOHEADER), fp); //写入位图信息头
  38.  
  39. byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight]; //申请内存保存位图数据
  40.  
  41. GetDIBits(memDC.m_hDC, (HBITMAP) memBitmap.m_hObject, , rect.Height(), p,
  42. (LPBITMAPINFO) &bih, DIB_RGB_COLORS); //获取位图数据
  43.  
  44. fwrite(p, , bmp.bmWidthBytes * bmp.bmHeight, fp); //写入位图数据
  45. delete [] p;
  46. fclose(fp);
  47. memDC.SelectObject(oldmemBitmap);
  48. memDC.DeleteDC();
  49. }

[MFC] MFC 获取指定窗口截图(大小可调)的更多相关文章

  1. WinAPI: GetClassName - 获取指定窗口的类名

    WinAPI: GetClassName - 获取指定窗口的类名 //声明: GetClassName( hWnd: HWND; {指定窗口句柄} lpClassName: PChar; {缓冲区} ...

  2. CSS3_盒阴影_倒影_盒子大小可调

    1. 盒阴影 会产生一个或者多个阴影 使用:    (多个阴影,以逗号隔开) /* (不能为负值) (可以负值) */ /* 水平方向偏移量 垂直反向偏移量 模糊程度 扩散程度 颜色 是否是内阴影; ...

  3. MFC中获取各个窗口之间的句柄或者指针对象的方法

    MFC在非常多的对话框操作中,我们常常要用到在一个对话框中调用还有一个对话框的函数或变量.能够用例如以下方法来解决.    HWND hWnd=::FindWindow(NULL,_T("S ...

  4. C# 非顶端窗口截图 - 用于查找指定窗口并截图

    原文地址:http://blog.csdn.net/u013096568/article/details/53400389 panel上可以通过DrawToBitmap截图,不管是否在屏幕外是否有遮挡 ...

  5. MFC获取各窗口指针句柄

    MFC在很多的对话框操作中,我们经常要用到在一个对话框中调用另一个对话框的函数或变量.可以用如下方法来解决.   HWND hWnd=::FindWindow(NULL,_T("Sphere ...

  6. (转载博文)MFC 窗口句柄获取

    句柄获取方法(获取该窗口的句柄后,即可向该窗口类类发送消息.处理程序):0.获取所在类窗口的句柄: this->m_hwnd 1.主窗口的句柄: 无论在主窗口类内,还是子窗口类内,获取主窗口句柄 ...

  7. MFC中无标题栏窗口的移动

    原文链接: http://blog.sina.com.cn/s/blog_6288219501015dwa.html   移动标准窗口是通过用鼠标单击窗口标题条来实现的,但对于没有标题条的窗口,就需要 ...

  8. MFC应用程序创建窗口的过程 good

    MFC应用程序中处理消息的顺序 1.AfxWndProc()      该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc()  该 ...

  9. MFC中的主窗口修改标题

    MFC中的主窗口修改标题 如何去掉“无标题”1.在主程序中的InitInstance(): m_pMainWnd->SetWindowText("你要显示的东西如果不想显示置空就行&q ...

随机推荐

  1. Python str方法总结

    1.返回第一个字母大写 S.capitalize(...) S.capitalize() -> string 1 2 3 4 >>>a = 'shaw' >>> ...

  2. VC++ CEdit

    CEDIT _1, //selection pEdit1->SetSel(0,strBuffer - m_strInput,0); pEdit1->SetFocus(); //the se ...

  3. VC++ 关于 ON_UPDATE_COMMAND_UI 相关的作用.

    ON_COMMAND_RANGE(ID_SORTING_GROUPBYTYPE, ID_SORTING_SORTBYACCESS, OnSort) ON_UPDATE_COMMAND_UI_RANGE ...

  4. buildroot 使用小记 - 2 源文件目录结构

    官方下载下来的buildroot源码包在解压后,是一个名为buildroot的文件夹,它下面的目录/文件结构如下: Makefile - 顶级makefile,编译总入口 Config.in - 顶级 ...

  5. vsftpd基于pam_mysql的虚拟用户机制

    何为vsftpd? vsftpd:very secure ftp daemon 程序:/usr/sbin/vsftpd 配置文件:/etc/vsftpd/vsftpd.conf 其用户分为:匿名用户( ...

  6. Selenium2+python自动化14-iframe

    前言 有很多小伙伴在拿163作为登录案例的时候,发现不管怎么定位都无法定位到,到底是什么鬼呢,本篇详细介绍iframe相关的切换 以http://mail.163.com/登录页面10为案例,详细介绍 ...

  7. mac--mac杂记

    zsh路径补全.命令补全,命令参数补全,插件内容补全等等.触发补全只需要按一下或两下tab键,补全项可以使用ctrl+n/p/f/b上下左右切换. plugins=(git textmate ruby ...

  8. mysql 大小写 整理

    mysql字段的值默认不区分大小写,如果有主键的表,主键列就不能插入重复的值(大小写不同) 实验 默认方式创建 CREATE TABLE `t1` ( `ID` varchar(40) CHARACT ...

  9. SQLServer 脚本测试

    最近在做大数据同步的工作.很少数据需要特殊清洗算法,每次测试,都测试全部数据,浪费时间,可以只测试那些特殊数据即可(切记).

  10. Linux下设置网卡随系统启动

    在GUI下安装RHEL,在配置网卡的时候,有时候会忘了勾选网卡随系统自动启动,解决方法是系统启动后,打开网卡配置文件/etc/sysconfig/network-script/ifcfg-eth*,将 ...