上位机MFC仿QQ截图工具源代码
上图为软件运行时效果。
软件以提示框形式提示具体截图操作步骤。
1.用鼠标 左键框选要截图的区域。
2.选择后可以用鼠标调整选择的区域。
3.取消可以exce或鼠标右键。确认可鼠标双击。
双击鼠标左键,实现将截图保存到剪切板。
当然您也可以修改代码,将图片保存到文件。
下面是对应关键代码
- HBITMAP CCatchScreenDlg::CopyScreenToBitmap(LPRECT lpRect,BOOL bSave)
- //lpRect 代表选定区域
- {
- HDC hScrDC, hMemDC;
- // 屏幕和内存设备描述表
- HBITMAP hBitmap, hOldBitmap;
- // 位图句柄
- int nX, nY, nX2, nY2;
- // 选定区域坐标
- int nWidth, nHeight;
-
- // 确保选定区域不为空矩形
- if (IsRectEmpty(lpRect))
- return NULL;
- //为屏幕创建设备描述表
- hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
- //为屏幕设备描述表创建兼容的内存设备描述表
- hMemDC = CreateCompatibleDC(hScrDC);
- // 获得选定区域坐标
- nX = lpRect->left;
- nY = lpRect->top;
- nX2 = lpRect->right;
- nY2 = lpRect->bottom;
- //确保选定区域是可见的
- if (nX < 0)
- nX = 0;
- if (nY < 0)
- nY = 0;
- if (nX2 > m_xScreen)
- nX2 = m_xScreen;
- if (nY2 > m_yScreen)
- nY2 = m_yScreen;
- nWidth = nX2 - nX;
- nHeight = nY2 - nY;
- // 创建一个与屏幕设备描述表兼容的位图
- hBitmap = CreateCompatibleBitmap
- (hScrDC, nWidth, nHeight);
- // 把新位图选到内存设备描述表中
- hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
- // 把屏幕设备描述表拷贝到内存设备描述表中
- if(bSave)
- {
- //创建军兼容DC,当bSave为中时把开始保存的全屏位图,按截取矩形大小保存
- CDC dcCompatible;
- dcCompatible.CreateCompatibleDC(CDC::FromHandle(hMemDC));
- dcCompatible.SelectObject(m_pBitmap);
-
- BitBlt(hMemDC, 0, 0, nWidth, nHeight,
- dcCompatible, nX, nY, SRCCOPY);
- }
- else
- {
- BitBlt(hMemDC, 0, 0, nWidth, nHeight,
- hScrDC, nX, nY, SRCCOPY);
- }
- hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
- //得到屏幕位图的句柄
- //清除
- DeleteDC(hScrDC);
- DeleteDC(hMemDC);
-
- if(bSave)
- {
-
- if (OpenClipboard())
- {
- //清空剪贴板
- EmptyClipboard();
- //把屏幕内容粘贴到剪贴板上,
- //hBitmap 为刚才的屏幕位图句柄
- SetClipboardData(CF_BITMAP, hBitmap);
- //关闭剪贴板
- CloseClipboard();
- }
- }
- // 返回位图句柄
- return hBitmap;
- }
复制代码
上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例 经历1年的编程与录制点击进入查看
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|