subject_15897.htm

来自「一些关于vc的问答」· HTM 代码 · 共 15 行

HTM
15
字号
<p>
序号:15897 发表者:Olive 发表日期:2002-09-23 16:25:52
<br>主题:如何拷贝屏幕上的图像
<br>内容:请教各位,如何在程序中控制,拷贝屏幕上某一区域内的图像?<BR>我可以得到这个区域的handle。<BR>非常感谢!!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:徐景周 回复日期:2002-09-23 16:47:53
<br>内容:可试试下面方法:<BR>17.&nbsp;&nbsp;&nbsp;&nbsp;如何将指定的窗体,以位图形式复制到系统剪切板上<BR>void CScreenSnapDlg::toClipboard_Bio(CWnd * wnd, BOOL FullWnd)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp; CDC *dc;<BR>&nbsp;&nbsp;&nbsp;&nbsp; if(FullWnd)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ /* 抓取整个窗口 */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dc = new CWindowDC(wnd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} /* 抓取整个窗口 */<BR>&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ /* 仅抓取客户区时 */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dc = new CClientDC(wnd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} /* 仅抓取客户区时 */<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; CDC memDC;<BR>&nbsp;&nbsp;&nbsp;&nbsp; memDC.CreateCompatibleDC(dc);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; CBitmap bm;<BR>&nbsp;&nbsp;&nbsp;&nbsp; CRect r;<BR>&nbsp;&nbsp;&nbsp;&nbsp; if(FullWnd)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wnd-&gt;GetWindowRect(&r);<BR>&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wnd-&gt;GetClientRect(&r);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; CString s;<BR>&nbsp;&nbsp;&nbsp;&nbsp; wnd-&gt;GetWindowText(s);<BR>&nbsp;&nbsp;&nbsp;&nbsp; CSize sz(r.Width(), r.Height());<BR>&nbsp;&nbsp;&nbsp;&nbsp; bm.CreateCompatibleBitmap(dc, sz.cx, sz.cy);<BR>&nbsp;&nbsp;&nbsp;&nbsp; CBitmap * oldbm = memDC.SelectObject(&bm);<BR>&nbsp;&nbsp;&nbsp;&nbsp; memDC.BitBlt(0, 0, sz.cx, sz.cy, dc, 0, 0, SRCCOPY);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; //直接调用OpenClipboard(),而不用wnd-&gt;GetParent()-&gt;OpenClipboard();<BR>&nbsp;&nbsp;&nbsp;&nbsp; wnd-&gt;OpenClipboard();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; ::EmptyClipboard();<BR>&nbsp;&nbsp;&nbsp;&nbsp; ::SetClipboardData(CF_BITMAP, bm.m_hObject);<BR>&nbsp;&nbsp;&nbsp;&nbsp; CloseClipboard();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; //恢复原始环境<BR>&nbsp;&nbsp;&nbsp;&nbsp; memDC.SelectObject(oldbm);<BR>&nbsp;&nbsp;&nbsp;&nbsp; bm.Detach();&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; delete dc;<BR>}<BR><BR>源码可到下面下载:<BR>http://www.csdn.net/cnshare/soft/13/13467.shtm<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:TopLevel 回复日期:2002-09-23 16:50:11
<br>内容://我写的代码:<BR>//leftupX, leftupY指定区域的左上角坐标。<BR>//rightdownX, rightdownY......右下角坐标。<BR>HBITMAP&nbsp;&nbsp;GetPartOfScreen(int leftupX, int leftupY, int rightdownX, int rightdowY)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HDC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hScrDC, hMemDC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//为屏幕设备创建设备描述表<BR>&nbsp;&nbsp;&nbsp;&nbsp;hScrDC&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;CreateDC( "DISPLAY", NULL, NULL, NULL );<BR>&nbsp;&nbsp;&nbsp;&nbsp;//为屏幕设备描述表创建兼容的内存设备描述表<BR>&nbsp;&nbsp;&nbsp;&nbsp;hMemDC&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;CreateCompatibleDC( hScrDC );<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 位图宽度和高度<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nWidth = rightdownX-leftupX, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nHeight = rightdowY-leftupY;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 创建一个与屏幕设备描述表兼容的位图<BR>&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP hNewBit = CreateCompatibleBitmap( hScrDC, nWidth, nHeight);<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 把新位图选到内存设备描述表中<BR>&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP hOldBitmap = (HBITMAP)SelectObject( hMemDC, hNewBit );<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 把屏幕设备描述表拷贝到内存设备描述表中<BR>&nbsp;&nbsp;&nbsp;&nbsp;StretchBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, leftupX, leftupY,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nWidth, nHeight, SRCCOPY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//得到屏幕位图的句柄<BR>&nbsp;&nbsp;&nbsp;&nbsp;hNewBit = (HBITMAP)SelectObject(hMemDC, hOldBitmap);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//清除 <BR>&nbsp;&nbsp;&nbsp;&nbsp;DeleteDC(hScrDC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;DeleteDC(hMemDC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hNewBit;<BR>}<BR>注意要释放位图句柄。<BR>2002-9-23 17:03:06

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?