函数是用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);
}

解决方案 »

  1.   

    同时显示或同时不显示那肯定说明几个static控件的上层程序有问题,我也不太清楚,瞎猜了,会不会类似主函数里面调用的那个地方出了一点小问题呢,比如说if,else语句中的else部分出了点问题
      

  2.   

    楼主的代码在我这里没有问题
    有两点需要注意:
    1.函数第一句我改成了 CClientDC hdcScreen(this);
    2.如果窗口上有其他窗口 那么其他窗口也会遮挡住Dialog的部分, 建议在使用CaptureScreen前首先使用SetWindowPos将窗体置顶。