永州网,内容丰富有趣,生活中的好帮手!
永州网 > 生活 > 正文

探究滚动条:深入解析WMNCCALCSIZE消息的第11章

时间:2024-02-13

本书通过对WMNCCALCSIZE消息的深入讲解,帮助读者更好地理解Windows窗口的非客户区尺寸计算过程

友情提示:本文共有 1708 个字,阅读大概需要 4 分钟。

《滚动条第11章节:更加深入的理解WM_NCCALCSIZE消息》是一本专注于Windows消息处理的编程书籍。本书通过对WM_NCCALCSIZE消息的深入讲解,帮助读者更好地理解Windows窗口的非客户区尺寸计算过程。作者结合实际案例和示例代码,详细解析了该消息的处理机制,并提供了实用的编程技巧和优化建议。无论是初学者还是有一定经验的开发者,都能从本书中学习到更深入的Windows消息处理知识,提高自己的编程水平。

当WM_NCCALCSIZE消息的WPARAM为TRUE时,这个消息会呈现出它另外一种更加复杂的形式。

在这种情况下,WM_NCCALCSIZE消息的LPARAM参数实际上是指向一个NCCALCSIZE_PARAM结构体的指针。

当Windows发送WM_NCCALCSIZE消息消息时,此结构体会使用如下的方式被填充:

> rgrc[0]: 新的窗口矩形(在父窗口坐标系下)

> rgrc[1]: 旧的窗口矩形(在父窗口坐标系下)

> rgrc[2]: 旧的客户区矩形(在父窗口坐标系下)

请注意,上面的客户区矩形是以父窗口坐标作为参考坐标系,而不是客户区的坐标系。

当WM_NCCALCSIZE消息的处理例程准备返回的时候,Windows会期望NCCALCSIZE_PARAM结构体以如下的方式被填充:

> rgrc[0]: 新的客户区矩形(在父窗口坐标系下)

新的客户区矩形指明了在新的窗口矩形中,窗口的客户区将如何在窗口矩形中被定位。

更进一步地,如果你的消息处理例程返回0以外的值,则Windows还会期望NCCALCSIZE_PARAM结构体的剩下两个成员以如下的方式被填充:

> rgrc[1]: 目标矩形(在父窗口坐标系下)

> rgrc[2]: 源矩形(在父窗口坐标系下)

(如果你返回的是0,则Windows会认为目标矩形和新的客户区矩形相等,并且源矩形和旧的客户区矩形相等)。

源矩形和目标矩形指明了旧窗口的哪一部分对应了新窗口的哪一部分。Windows将会从源矩形中拷贝所有像素到目标矩形并保持它们的有效性。

WM_NCCALCSIZE消息的返回值表示的意思是:如果两个矩形(源矩形和目标矩形)不相等,应该如何处理这两个矩形的像素差别。默认的处理方式是从矩形的左上角对齐这两个矩形。

接下来,让我们来使用一个全新的例子来演示一下自定义的矩形的情况。(我们后面还是会回到之前的滚动条的系列程序)。

首先,下面的帮助函数会计算一个矩形的中心位置。

练习题:为什么我们在上面的帮助函数中使用c = a + (b – a) /2 这个公式,而不是使用更为简单的c = (a + b) / 2呢?

下面是我们的PaintContent函数:

当我们调试界面闪烁的问题的时候,故意地绘制一个很显眼的背景色并添加一些手动的暂停可能会非常有帮助,因为这样你可以清楚地看到绘制过程是如何进行的。

但是,需要注意的是,当你准备这样做的时候,需要调用GdiSetBatchLimit来禁止GDI批处理。否则,GID将会优化掉所有的重复填充操作,这样的话,你就不会具体的绘制过程。

真正起作用的是我们的WM_NCCALCSIZE消息处理例程:

上面的代码会如何工作呢?

如果fCalcValidRects为TRUE,我们将会通过查看窗口的内容需要偏移多少来计算有效的矩形,然后将有效的目标矩形移动相同的偏移量。用户将有效源矩形的左上角拷贝至目标矩形的左上角,因此,将目标矩形的左上角进行偏移让我们可以调整用户拷贝的部分。

可以这样进行测试: 拖动窗口并尝试调整窗口的大小。我们可以观察到:窗口客户区的中心部分从窗口的原始位置上被拷贝且没有被重绘。

这样会带来两种好处:第一,没有出现界面闪烁的情况。二是,优化了绘制性能,因为我们并没有进行非必要的像素绘制。

上面提到的第二个好处特别重要,因为当我们使用远程桌面时,客户端需要在网络上传输所有需要绘制的像素,需要传输的像素越少,则远程桌面使用起来会更加流畅。

现在,我们对WM_NCCALCSIZE消息有了更加深入地理解了,我们可以利用它来优化我们的滚动条程序了。

收集不易,本文《探究滚动条:深入解析WMNCCALCSIZE消息的第11章》知识如果对你有帮助,请点赞收藏并留下你的评论。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(4)
  1. 汉尼拔2024-02-13 18:37汉尼拔[安徽省网友]45.115.120.3
    对WMNCCALCSIZE消息的探究能够帮助我们更好地理解滚动条的工作原理,非常期待!
    顶8踩0
  2. 假装2024-02-13 18:23假装[陕西省网友]45.125.138.170
    @GRAT琉璃学习WMNCCALCSIZE消息的过程一定会让人感到收获满满。
    顶3踩0
  3. GRAT琉璃2024-02-13 18:09GRAT琉璃[青海省网友]210.16.157.238
    这个话题看起来相当复杂,不过我相信作者会很好地阐明相关内容。
    顶34踩0
  4. 蜜蜜枝头2024-02-13 17:55蜜蜜枝头[贵州省网友]203.80.57.114
    太棒了,期待深入了解WMNCCALCSIZE消息的内部工作原理!
    顶3踩0
相关阅读
2024年元旦放假通知:一个好消息,两个坏消息,引发热议

2024年元旦放假通知:一个好消息,两个坏消息,引发热议

公司宣布的三天假期——从12月30日到1月1日——本应是人们欢庆新年的美好时刻,却因假日办的一纸通知,引发了广大网友的热议

2023-12-27 #推荐

广东移动下架4G套餐消息不实 公司:暂无计划

广东移动下架4G套餐消息不实 公司:暂无计划

公司近期未对4G套餐进行调整,也并无此类计划

2023-11-21 #头条

EXO最新消息:近况揭秘

EXO最新消息:近况揭秘

现以9名成员的形式展开活动,分别为金珉锡、金俊勉、张艺兴、边伯贤、金钟大、朴灿烈、都暻秀、金钟仁、吴世勋按年龄降序排列,其中张艺兴为中国籍成员

2023-12-08 #随笔

好消息!车厘子价格开始下跌,电商平台一斤不到40元

好消息!车厘子价格开始下跌,电商平台一斤不到40元

尤其是在沿海城市,车厘子的销量呈现出明显的上升趋势

2023-12-09 #推荐

好消息!车厘子价格开始下跌,电商平台一斤不到40元

好消息!车厘子价格开始下跌,电商平台一斤不到40元

尤其是在沿海城市,车厘子的销量呈现出明显的上升趋势

2023-12-09 #推荐

王楚然否认出演难哄:网传消息被证实为谣言

王楚然否认出演难哄:网传消息被证实为谣言

稍后王楚然粉丝对接否认网传出演难哄:经核实,网传消息为假,请勿信谣传谣

2023-12-11 #永州

李纯个人简历:资料详情和最新消息

李纯个人简历:资料详情和最新消息

2011年出演张艺谋导演的电影金陵十三钗中饰演秦淮河女获得观众关注,从此踏入演艺圈

2023-12-12 #随笔

一念关山:崩人设!大结局传来震撼消息,六道堂全员战死?

一念关山:崩人设!大结局传来震撼消息,六道堂全员战死?

安国二皇子勾结北磐,并且骗开了天门关,导致了北磐大军攻入天门关,进入安国境内,酿成了大祸

2023-12-19 #推荐

00后民警用喜悦和勇气帮追回60万骗款,蹦蹦跳跳大笑着与同事分享好消息

00后民警用喜悦和勇气帮追回60万骗款,蹦蹦跳跳大笑着与同事分享好消息

网友:#隔着屏幕都感受到了民警的开心#!

2023-12-25 #推荐