【问题标题】:Properly handle VK_DELETE when subclassing edit control子类化编辑控件时正确处理 VK_DELETE
【发布时间】:2014-03-16 17:27:21
【问题描述】:

我将编辑控件子类化为只接受十进制数字。

一切正常,剩下的唯一事情就是处理用户选择部分文本并按下Delete 键(VK_DELETE)的情况。

我的问题如下:

按下Delete 键(VK_DELETE)是否会发送一些类似WM_CLEAR 的消息,我可以将其用于我的处理,还是我必须在我的子类化过程中处理WM_KEYDOWN 并在那里进行处理?

谢谢。

最好的问候。

【问题讨论】:

    标签: c++ winapi subclassing editcontrol


    【解决方案1】:

    在记事本的编辑控件上运行 Spy++ 后,我得出的结论是 WM_KEYDOWN/WM_KEYUP 就是你得到的一切。

    <000001> 0015082E S WM_KILLFOCUS hwndGetFocus:0015082E
    <000002> 0015082E R WM_KILLFOCUS
    <000003> 0015082E S WM_SETFOCUS hwndLoseFocus:002D0830
    <000004> 0015082E R WM_SETFOCUS
    <000005> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
    <000006> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
    <000007> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
    <000008> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
    <000009> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
    <000010> 0015082E P WM_KEYDOWN nVirtKey:VK_DELETE cRepeat:1 ScanCode:53 fExtended:1 fAltDown:0 fRepeat:0 fUp:0
    <000011> 0015082E P WM_KEYUP nVirtKey:VK_DELETE cRepeat:1 ScanCode:53 fExtended:1 fAltDown:0 fRepeat:1 fUp:1
    <000012> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
    <000013> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
    <000014> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
    <000015> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
    <000016> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
    <000017> 0015082E S EM_GETSEL lpdwStart:0020F330 lpdwEnd:0020F334
    <000018> 0015082E R EM_GETSEL wStart:2 wEnd:2 lpdwStart:0020F330 (2) lpdwEnd:0020F334 (2)
    <000019> 0015082E S WM_KILLFOCUS hwndGetFocus:(null)
    <000020> 0015082E R WM_KILLFOCUS
    

    相关行是&lt;000010&gt;&lt;000011&gt;WM_KEYDOWNWM_KEYUP 是背靠背的。根本没有调用WM_CLEAR一条有趣的 0x0118 消息,但在每次按键时都会显示,而不仅仅是删除键。

    【讨论】:

    • 感谢您验证我的假设。我猜WM_KEYDOWN 是唯一的出路。最好的问候。
    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多