关于窗口抖动的WM_NCPAINT和WM_NCCALCSIZE的有关问题
来源:互联网 发布:成都 人工智能 招聘 编辑:程序博客网 时间:2024/05/21 11:15
一直以来非客户区的绘制是一个令我非常头痛的问题,并不是因为不好画,而是因为即使你画好了,还存在许多瑕疵。但令我最不能接受的就是当鼠标拖拽左上角时,软件的又下角一直抖动个不停,而系统处理时却没有出现这种现象。对于这个问题,我发现微软自家产品VS2015在拖拽左上角时也有抖动现象,当然其他自绘非客户区的软件也都有类似的现象。期间想过很多中方法解决这个问题,比如先让Windows自绘后我再画,没有任何效果。然而在自绘非客户区(WM_NCPAINT)时,我无意间在WM_NCCALCSIZE消息中下个断点。发现平时窗口启动时不处理的WM_NCCALCSIZE消息触发了断点。然后又在WM_NCPAINT中用DefWindowProc并下断点重新调试,发现窗口启动WM_NCCALCSIZE没有被处理。经过反复调式得出结论,默认的WM_NCPAINT处理中“拦截“了WM_NCCALCSIZE。为什么这么说呢?因为调试过程中,我反复拖拽窗口时断点触发顺序:1.当系统默认处理WM_NCPAINT时(在此消息中调用DefWindowProc即可下断点):先WM_NCCALCSIZE,再WM_NCPAINT。2.当自绘非客户去时(不在WM_NCPAINT中调用DefWindowProc):先WM_NCCALCSIZE,再WM_NCPAINT,再WM_NCCALCSIZE,再WM_NCPAINT。也就是说这两个消息循环调用了两次。所以,我猜想系统默认的WM_NCPAINT处理会拦截WM_NCCALCSIZE消息,避免重复调用。因此,我又大胆的猜想,非客户区的抖动也许就是因为反复调用WM_NCCALCSIZE和WM_NCPAINT所引起。很遗憾没能解决这个问题,这里就当做个笔记,希望有知道或解决了此问题的高人指点一下。
阅读全文
0 0
- 关于窗口抖动的WM_NCPAINT和WM_NCCALCSIZE的有关问题
- 窗口的简单抖动
- 抖动窗口的实现
- WM_NCCALCSIZE的使用
- 窗口抖动和类消息提示窗口的实现
- WM_PAINT, WM_NCPAINT, WM_ERASEBKGND的关系
- 基于MFC的opengl编程(解决拖动窗口抖动问题)
- 窗口抖动效果的实现
- 手机屏幕窗口抖动的实现
- MFC关于窗口的有关操作
- MFC关于窗口的有关操作
- 窗口抖动问题
- CSplitterWnd分割窗口的有关问题
- 关于dropdownlist的有关问题
- 关于log4j有关的问题
- 关于 extern 的有关问题
- CMainFrame中找不到WM_NCPAINT的原因
- 一个小的抖动窗口实例
- C语言程序设计教程(第三版)课后习题11.5
- 人员分配[模板_最大匹配]
- BZOJ[2084][Poi2010]Antisymmetry Manacher
- wpf中放置图片
- BZOJ 3684 大朋友和多叉树(生成函数+FFT)
- 关于窗口抖动的WM_NCPAINT和WM_NCCALCSIZE的有关问题
- 变积系数与Jacobi矩阵
- 网络聊天室前奏(一)atoi函数
- HTML-CSS
- 基于canvas的超级画板
- 创建对象的三种模式
- 又见回文
- AI
- Django 视图,模板,路由规则