函数是用wtl写的,用于窗口客户区截图
截图的时候几个static控件同时显示或同时不显示,而其他控件均正常显示
想问一下可能是什么原因,下面是代码void CBillDlg::CaptureScreen(CString FileName)
{
CClientDC hdcScreen(m_hWnd); CRect clientRect;
GetClientRect(&clientRect); HDC hdcCompatible = CreateCompatibleDC(hdcScreen); HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen,clientRect.Width(),clientRect.Height()); if (hbmScreen == 0)
MessageBox("hbmScreen","错误",MB_OK);
if (!SelectObject(hdcCompatible, hbmScreen))
MessageBox("Compatible Bitmap Selection", "错误",MB_OK); if (!BitBlt(hdcCompatible,0,0,clientRect.Width(),clientRect.Height(),hdcScreen,0,0,SRCCOPY))
MessageBox("Screen to Compat Blt Failed","错误",MB_OK); HBITMAP2Bmp(hbmScreen,FileName); //保存成文件 DeleteObject(hbmScreen);
DeleteDC(hdcCompatible);
DeleteDC(hdcScreen);
}
截图的时候几个static控件同时显示或同时不显示,而其他控件均正常显示
想问一下可能是什么原因,下面是代码void CBillDlg::CaptureScreen(CString FileName)
{
CClientDC hdcScreen(m_hWnd); CRect clientRect;
GetClientRect(&clientRect); HDC hdcCompatible = CreateCompatibleDC(hdcScreen); HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen,clientRect.Width(),clientRect.Height()); if (hbmScreen == 0)
MessageBox("hbmScreen","错误",MB_OK);
if (!SelectObject(hdcCompatible, hbmScreen))
MessageBox("Compatible Bitmap Selection", "错误",MB_OK); if (!BitBlt(hdcCompatible,0,0,clientRect.Width(),clientRect.Height(),hdcScreen,0,0,SRCCOPY))
MessageBox("Screen to Compat Blt Failed","错误",MB_OK); HBITMAP2Bmp(hbmScreen,FileName); //保存成文件 DeleteObject(hbmScreen);
DeleteDC(hdcCompatible);
DeleteDC(hdcScreen);
}
有两点需要注意:
1.函数第一句我改成了 CClientDC hdcScreen(this);
2.如果窗口上有其他窗口 那么其他窗口也会遮挡住Dialog的部分, 建议在使用CaptureScreen前首先使用SetWindowPos将窗体置顶。