有一些对话框会包含一些自定义按键导航,例如,属性表控件(Property Sheet),你可以通过按下 CTRL TAB 或者 CTRL SHIFT TAB 来切换不同的属性页面。如果要实现这样的功能,仅仅靠IsDialogMessage是不够的,你需要自己写点代码才行。

我们先看看之前我们的对话框消息循环的代码实现:

对话框窗口分割后的使用(对话框管理器第八章)(1)

为了添加自定义导航,我们可以在IsDialogMessage调用之前,添加下面蓝色的部分。

对话框窗口分割后的使用(对话框管理器第八章)(2)

代码解析

当收到一条消息时,在分发此消息,甚至在IsDialogMessage之前,我们先检查它是否为 CTRL TAB 按键,如果是的话,我们将它看做是一个导航快捷键。

请注意,如果希望将这段代码用在非模态对话框上,则你需要注意一个细节,因为我们不希望占用无模式对话框中现有的按键导航。请看下面修改之后的代码:

对话框窗口分割后的使用(对话框管理器第八章)(3)

在后面的文章中,我们将会使用另外一种方法实现相同的功能,敬请期待。

总结

大部分人,都是使用鼠标完成大部分日常任务。按键键导航这个功能,很少有用户会使用。但是,作为一个完美主义者,这个功能我一定会在TopomelBox中慢慢给加上。可以不用,但不能没有。鼠标操作平易近人,但是操作效率上来说,还是没有快捷键那样快速高效暴力直接。比如,你经常会使用到的 CTRL C 和 CTRL V 这两项技法。正所谓:天下武功,唯快不破。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《The dialog manager, part 8: Custom navigation in dialog boxes》

对话框窗口分割后的使用(对话框管理器第八章)(4)

,