HDC GetDCEx( HWND hWnd, // handle to window HRGN hrgnClip, // handle to clipping region DWORD flags // creation options );
BeginPaint、EndPaint可以删除消息队列中的WM_PAINT消息,并使无效区域有效。 GetDC、ReleaseDC并不删除WM_PAINT消息,也不能使无效区域有效。当程序跳出 WM_PAINT 时,无效区域仍然存在。系统会不断发送WM_PAINT消息,于是程序不断处理WM_PAINT,造成闪烁。
有效与无效都会发送一条 WM_PAINT 消息给窗口 区别就是在 PAINTSTRUCT 中 rcPaint 注明哪个区域需要重绘 窗口会在你的绘画代码完成后,剪接该区域 例如你一个 100*100 的窗口 现在需要重绘起点为10-10,大小为50-50的区域 那么你可以在 OnPaint 里面整个窗口重画,也可以单独只画这个区域(BeginPaint 或 CPaintDC 得到的 DC 都是相对于整个客户区,你可以整个客户区重绘,也可以单独重绘某个区域) 无论你绘画的是哪个区域,Windows 都会把 BeginPaint 或 CPaintDC 得到的 HDC 中相应需要重绘的区域在你绘画完毕后剪接出来画到窗口上(根据 PAINTSTRUCT 中的 rcPaint 成员来剪接) 意思就是其实我们得到的那个 HDC 是系统根据窗口分配给我们使用的临时 DC,在 ReleaseDC 或者 EndPaint 后系统才会把我们画的东西复制到真正的窗口上
16,472
社区成员
421,732
社区内容
加载中
VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌…… 向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能…… 我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……
试试用AI创作助手写篇文章吧