WM_KEYDOWN我在编辑框中处理消息。
我正在处理一堆键,但对于某些键(例如选项卡),我想阻止可显示字符附加到编辑框。
case WM_KEYDOWN:
{
switch(wParam)
{
case VK_TAB:
//handle tab here
//Eat tab key
return 0;
default:
return DefWndProc(hwnd,message,wParam,lParam);
}
}
break;
Run Code Online (Sandbox Code Playgroud)
我可以检测并删除消息中的选项卡WM_KEYUP,但使用此方法,可以明显地在编辑框中添加和删除选项卡键。
有什么办法可以吃掉钥匙吗WM_KEYDOWN?
执行此操作的预期方法是处理消息WM_GETDLGCODE并告诉窗口管理器编辑控件不想处理该TAB键。Raymond Chen 在这篇文章中讨论了这个问题:那些不理解对话管理器的人注定要重新实现它,非常糟糕。正如雷蒙德经常遇到的情况一样,这篇文章的标题相当具有挑衅性。
文章中的代码示例如下所示:
LRESULT CALLBACK SubclassWndProc(
HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LRESULT lres;
switch (uMsg) {
case WM_GETDLGCODE:
lres = CallWindowProc(...);
lres &= ~DLGC_WANTTAB;
if (lParam &&
((MSG *)lParam)->message == WM_KEYDOWN &&
((MSG *)lParam)->wParam == VK_TAB) {
lres &= ~DLGC_WANTMESSAGE;
}
return lres;
}
return CallWindowProc(...);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2299 次 |
| 最近记录: |