1

我目前正在开发一个使用 WIN32 API 的用户界面 DLL。DLL 必须适用于多种平台、XP、WIN CE 等。我已设法合并停靠、锚定等,但似乎有关于所有者绘制按钮的问题。我可以绘制按钮的正确状态,焦点,点击,默认。但是,我无法收到关键通知。如果用户按 Enter,我特别想对当前具有焦点的按钮执行单击操作。

请注意,我使用的是 Windows 消息循环而不是对话消息循环。我使用 windows 挂钩来挂钩窗口创建并将用户数据设置为“指向”我的控件实例。如果我在主消息循环中测试 WM_KEYDOWN,我可以获得按钮控件实例的句柄,并将消息转发到相关控件。不幸的是,我正在处理很多遗留代码,这可能不是一个理想的解决方案。

所以,我的问题是什么是最好的前进方式。子类化按钮控件的窗口过程是一个可行的选择还是有更简单的方法?

提前谢谢了。

4

2 回答 2

4

上面的评论是正确的。具有焦点的按钮应该获取关键信息。但是按钮不(自己)响应 Enter —— 它们响应 Space。听起来您缺少的是典型的对话框键盘导航,例如 Tab 键移动焦点和 Enter 激活“默认”按钮。

如果您有一个典型的 Windows 消息泵,并且您希望键盘行为通常与对话框相关联,那么您需要在消息循环中使用IsDialogMessage API。这意味着您的窗口本质上是一个“无模式对话框”。

于 2013-06-04T19:35:25.900 回答
0

看起来标准窗口 proc 子类化应该可以解决问题。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms633591(v=vs.85).aspx

于 2013-06-04T18:46:05.680 回答