【问题标题】:Does CComboBox control always takes capital letters as we type in itCComboBox 控件在我们输入时总是采用大写字母吗
【发布时间】:2015-08-06 12:16:52
【问题描述】:

我正在使用 CComboBox 控件。当我在其中输入一些字符并检查输入了哪个字母(在 PreTranslateMessage() 中)时,我总是在其消息的 wParam 中得到大写字母。我的 CComboBox 控件没有大写属性 TRUE。为什么会这样?

【问题讨论】:

  • 您可能正在检查 WM_KEYDOWN,并获得扫描码(识别您按下的物理键)。您需要检查 WM_CHAR。为什么使用PreTranslateMessage 而不是普通的消息处理程序?
  • CComboBox 属性“大写”如何影响发送给它的消息?该属性只能影响组合框对其接收到的消息的处理方式。 (即:收到WM_CHAR('a') 时表现得好像收到了WM_CHAR('A')
  • @peterchen:是的,我正在检查 WM_KEYDOWN。明白了:)谢谢
  • @MSalters:明白了 :) 谢谢。我认为该属性也可能会更改输入。

标签: c++ windows mfc ccombobox


【解决方案1】:

钥匙是有趣的东西。默认状态是什么,小写还是大写?

如果您查看键盘,物理键上很可能带有大写字母。默认值:大写

当您键入键时,您需要按住 shift 键来创建大写键,而没有 shift 键则会得到小写。默认值:小写

您也可以使用 Caps Lock 键。 Caps Lock 通常处于关闭状态。默认值:小写。

发送到您的应用程序的未翻译按键使用VK_A - VK_Z 键码。 VK_A 是“A”而不是“a”。默认值:大写。大写锁定和移位稍后在翻译中应用。

这本可以设计一致,但事实并非如此,现在我们陷入了向后兼容的混乱局面。如果您想要“正常”键盘行为,请不要尝试完全复制操作系统行为。有一些你可能不知道的东西,比如“粘滞键”(按住 shift 以获得类似 Caps Lock 的行为)。相反,请使用操作系统的最终结果。对于 Windows,这是WM_CHAR

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多