标签:
对于MFC程序员来说做UI开发是痛苦的事情,不过大多数情况下我们都需要做这件事情,因为MFC自带的控件实在是太简陋了。这时候我们多半会涉及到自绘控件,随之而来的很可能就是窗口和控件的闪烁问题。这篇文章希望对MFC的窗口和控件闪烁问题做一个尽量全面的总结。具体处理过程是在CDialog的OnNcLButtonDown消息响应函数中,当用户点击对话框的非客户区时该函数会被调用,而我们移动窗口或者调整窗口大小都是要点击非客户区(标题栏或边框)触发该消息。拖动过程中的处理是在CDialog::OnNcLButtonDown(nHitTest, point)中完成的,因此,我们只要按如下代码实现即可:
void CMyDlg::OnNcLButtonDown(UINT nHitTest, CPoint point) { // 1,查询当前系统“拖动显示窗口内容”设置 SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, &m_bDragFullWindow, NULL); // 2,如果需要修改设置,则在每次进入CDialog::OnNcLButtonDown默认处理之前修改 if(m_bDragFullWindow) SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, FALSE, NULL, NULL); // 3,默认处理,系统会自动绘制虚框 CDialog::OnNcLButtonDown(nHitTest, point); // 4,默认处理完毕后,还原系统设置 if(m_bDragFullWindow) SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, TRUE, NULL, NULL); }
标签:
原文地址:http://blog.csdn.net/jiangqin115/article/details/45047333