关于WM_GETDLGCODE的一些小技巧

关于WM_GETDLCODE这个消息

WM_GETDLCODE这个消息可以用来控制对话框管理器的行为。在之前的一篇文章中,我们讲述了如何通过DLGC_HASSETSEL这个标志来控制编辑框的自动选择行为。

本来我还想讲一讲其他的一些标志,但是我发现在[知识库83302]中已经讲述的比较全面了,所以我就不打算再来长篇大论一番,而只是把我认为重要的点稍微提一下。

坐好了吗?

在众多标志位中,DLGC_WANTMESSAGE是最有用的一个。它可以用来控制对话框管理器,实现禁止对话框管理器对指定消息的处理。

举个例子,当输入焦点在某个特殊的控件上时,你不希望用户按下ESC按键退出对话框,而是希望由控件本身来处理,则可以处理WM_GETDLGCODE这个消息并检查它的LPARAM参数,如果发现用户按下的是ESC按键,则可以返回DLGC_WANTMESSAGE,这样这个消息就不会被对话框管理器进行默认的处理。

另外的几个标志诸如DLGC_WANTCHARS, DLGC_WANTTAB和DLGC_WANTARROWS,也是类似的用法,它们主要为了方便地检查某一类消息。

总结

在准备修改窗口默认行为之前,我们应该先考虑是否真的有必要这样做。

因为如果消息处理逻辑一旦处理不当,就会使你的程序表现得难以使用,或者不符合用户的操作预期,因为用户已经习惯了其他程序的统一行为。