关于MFC窗口重绘的问题 请问能够检测到窗口的全部重绘与部分重绘吗?因为我需要获得窗口的DC,当全部重绘时,获得的dc是正确的,当部分重绘时,获得的dc会有我贴的图这样获得的dc是错误,请问有什么办法解决 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我在OnPaint()上的代码是这样的CPaintDC dc(this);INT cx = GetSystemMetrics(SM_CXSCREEN),cy = GetSystemMetrics(SM_CYSCREEN);::BitBlt(ClearDC.m_hDC,0,0,cx,cy,dc.m_hDC,0,0,SRCCOPY);PainOP->MapMemDC(&dc);因为我需要取得通过ClearDC来保存没有画过图的dc,如果部分重绘的话我取得的ClearDC是已经有我画过的图的了 我还是没弄明白ClearDC是哪来的你要干什么不过调用Invadidate还是InvalidateRectdc上的内容应该是一样的 ClearDC是一个内存dc,用来保存没有画过图的窗口dc来的,就是在这个窗口上有个子窗口出现并一度子窗口的话,就会出现部分重绘,从而导致取到的ClearDC不是所要取得的 创建窗口时获得的CClientDC dc(this);ClearDC.m_hDC = ::CreateCompatibleDC(dc.m_hDC);HBITMAP hBitmap = ::CreateCompatibleBitmap(dc.m_hDC,cx,cy);SelectObject(ClearDC.m_hDC,hBitmap);::BitBlt(ClearDC.m_hDC,0,0,cx,cy,dc.m_hDC,0,0,SRCCOPY); 下载我的“ScrollBitmap.rar”注意: else {// typical way painting in dialog. CPaintDC dc(this); m_Pic.Invalidate(FALSE);// do not erase background! dc.BitBlt(m_rcPicture.left,m_rcPicture.top,m_rcPicture.Width(), m_rcPicture.Height(),&m_dcMem, m_Sourcex, m_Sourcey,SRCCOPY);// others CDialog::OnPaint(); } http://www.vckbase.com/document/viewdoc/?id=1612 可以参考下。。 MFC高手请进 请问非程序员人士中掌握VC的概率? 如何在VS2005中,将一个Win32工程改为MFC工程 指针增长问题,在线等待 COM的返回值问题!(在线等待)急急急!!!!!!!!!!! 为什么我的msdn开始的时候会跳出一个对话框 送分,新手学vc(在线等代马上结帖) 救急,那位高手能出山相助,不胜感激!50分,不够再加! 请问各位,/?????-------- 如何判断FTP上的目录是空目录 怎么修改TextOut 输出字体 的颜色 mfc对话框编程问题
CPaintDC dc(this);
INT cx = GetSystemMetrics(SM_CXSCREEN),cy = GetSystemMetrics(SM_CYSCREEN);
::BitBlt(ClearDC.m_hDC,0,0,cx,cy,dc.m_hDC,0,0,SRCCOPY);
PainOP->MapMemDC(&dc);
因为我需要取得通过ClearDC来保存没有画过图的dc,
如果部分重绘的话我取得的ClearDC是已经有我画过的图的了
ClearDC是哪来的
你要干什么
不过调用Invadidate还是InvalidateRect
dc上的内容应该是一样的
就是在这个窗口上有个子窗口出现并一度子窗口的话,就会出现部分重绘,从而导致取到的ClearDC不是所要取得的
CClientDC dc(this);
ClearDC.m_hDC = ::CreateCompatibleDC(dc.m_hDC);
HBITMAP hBitmap = ::CreateCompatibleBitmap(dc.m_hDC,cx,cy);
SelectObject(ClearDC.m_hDC,hBitmap);
::BitBlt(ClearDC.m_hDC,0,0,cx,cy,dc.m_hDC,0,0,SRCCOPY);
注意:
else
{// typical way painting in dialog.
CPaintDC dc(this);
m_Pic.Invalidate(FALSE);// do not erase background!
dc.BitBlt(m_rcPicture.left,m_rcPicture.top,m_rcPicture.Width(),
m_rcPicture.Height(),&m_dcMem, m_Sourcex, m_Sourcey,SRCCOPY);
// others
CDialog::OnPaint();
}