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. 如何将指定的窗体,以位图形式复制到系统剪切板上<BR>void CScreenSnapDlg::toClipboard_Bio(CWnd * wnd, BOOL FullWnd)<BR>{<BR> CDC *dc;<BR> if(FullWnd)<BR> { /* 抓取整个窗口 */<BR> dc = new CWindowDC(wnd);<BR> } /* 抓取整个窗口 */<BR> else<BR> { /* 仅抓取客户区时 */<BR> dc = new CClientDC(wnd);<BR> } /* 仅抓取客户区时 */<BR><BR> CDC memDC;<BR> memDC.CreateCompatibleDC(dc);<BR><BR> CBitmap bm;<BR> CRect r;<BR> if(FullWnd)<BR> wnd->GetWindowRect(&r);<BR> else<BR> wnd->GetClientRect(&r);<BR><BR> CString s;<BR> wnd->GetWindowText(s);<BR> CSize sz(r.Width(), r.Height());<BR> bm.CreateCompatibleBitmap(dc, sz.cx, sz.cy);<BR> CBitmap * oldbm = memDC.SelectObject(&bm);<BR> memDC.BitBlt(0, 0, sz.cx, sz.cy, dc, 0, 0, SRCCOPY);<BR><BR> //直接调用OpenClipboard(),而不用wnd->GetParent()->OpenClipboard();<BR> wnd->OpenClipboard();<BR><BR> ::EmptyClipboard();<BR> ::SetClipboardData(CF_BITMAP, bm.m_hObject);<BR> CloseClipboard();<BR><BR> //恢复原始环境<BR> memDC.SelectObject(oldbm);<BR> bm.Detach(); <BR><BR> 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 GetPartOfScreen(int leftupX, int leftupY, int rightdownX, int rightdowY)<BR>{<BR> HDC hScrDC, hMemDC;<BR> //为屏幕设备创建设备描述表<BR> hScrDC = CreateDC( "DISPLAY", NULL, NULL, NULL );<BR> //为屏幕设备描述表创建兼容的内存设备描述表<BR> hMemDC = CreateCompatibleDC( hScrDC );<BR> // 位图宽度和高度<BR> int nWidth = rightdownX-leftupX, <BR> nHeight = rightdowY-leftupY; <BR> // 创建一个与屏幕设备描述表兼容的位图<BR> HBITMAP hNewBit = CreateCompatibleBitmap( hScrDC, nWidth, nHeight);<BR> // 把新位图选到内存设备描述表中<BR> HBITMAP hOldBitmap = (HBITMAP)SelectObject( hMemDC, hNewBit );<BR> // 把屏幕设备描述表拷贝到内存设备描述表中<BR> StretchBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, leftupX, leftupY, nWidth, nHeight, SRCCOPY);<BR> //得到屏幕位图的句柄<BR> hNewBit = (HBITMAP)SelectObject(hMemDC, hOldBitmap);<BR> //清除 <BR> DeleteDC(hScrDC);<BR> DeleteDC(hMemDC);<BR> return hNewBit;<BR>}<BR>注意要释放位图句柄。<BR>2002-9-23 17:03:06
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?