我目前正在开发使用WIN32 API的用户界面DLL。 DLL必须适用于许多平台,XP,WIN CE等。我已设法将对接,锚定等结合,但似乎有关于所有者绘制按钮的问题。我可以绘制按钮的正确状态,焦点,单击,默认。但是,我无法收到密钥通知。我特别希望对当前具有焦点的按钮执行单击操作,如果用户按下回车键。
请注意,我使用的是Windows消息循环,而不是对话框消息循环。我使用Windows钩子挂钩到窗口创建中,并将用户数据设置为“指向”我的控件实例。如果我在主消息循环中测试WM_KEYDOWN,我可以获得我的按钮控件实例的句柄,并可以将消息转发给相关控件。不幸的是,我正在处理大量遗留代码,这可能不是一个理想的解决方案。
所以,我的问题是前进的最佳方式是什么。是否将按钮控件的窗口过程子类化为可行选项还是有更简单的方法?
非常感谢提前。
答案 0 :(得分:4)
以上评论是正确的。有焦点的按钮应该是获取关键信息。但按钮不会(自己)响应Enter - 它们会响应Space。这听起来像你缺少的是典型的对话键盘导航,比如Tab键移动焦点和Enter激活“默认”按钮。
如果您有一个典型的Windows消息泵,并且您希望键盘行为通常与对话框相关联,那么您需要在消息循环中使用IsDialogMessage API。这意味着您的窗口本质上是一个“无模式对话框”。
答案 1 :(得分:0)
看起来标准的窗口proc子类化应该可以解决问题。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms633591(v=vs.85).aspx。