目前共有1篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:不轉換▼
 
點擊 回復
449 0
【解决办法】在Win32窗口程序中,当主窗口中的控件(子窗口)获得焦点时,快捷键无效的解决办法
一派護法 十九級
1樓 發表于:2016-1-23 16:33
【症状】
以ListView控件为例。在Win32中默认的窗口中用CreateWindow创建一个ListView子窗口。运行程序,发现刚开始的时候快捷键是有反应的,但是一旦鼠标指针点了那个ListView的内部,快捷键就再也没有反应了。

【解决办法】
在WinMain函数中的消息循环中,将TranslateAccelerator后面的第一个参数msg.hwnd改为hWnd(也就是消息循环前用CreateWindow创建主窗口时返回的句柄)。
如图所示:




这是我的快捷键表。运行程序经过测试,无论是普通快捷键还是带Ctrl或Alt的快捷键都是有效的。
所有的快捷键都是关联菜单ID,而不是关联默认创建的ID_ACCELERATOR32805之类的快捷键ID。

不过对于ListView来说,如果启用了EditLabel的话,就最好不要在快捷键中加入单独的回车键(不带Ctrl或Alt那种),否则会影响编辑框对回车键的响应。如果要用回车键打开项目的话,最好在ListView控件对应的LVN_KEYDOWN通知中单独对回车键进行处理。当标签编辑模式下按下回车键,ListView并不会发送LVN_KEYDOWN通知,而如果是普通模式下按下回车键则会发送LVN_KEYDOWN通知。
例如:
switch (uMsg)
{
//...
case WM_NOTIFY:
{
    LPNMHDR header = (LPNMHDR)lParam;
    if (header->code == LVN_KEYDOWN)
    {
            LPNMLVKEYDOWN pnkd = (LPNMLVKEYDOWN)lParam;
            if (pnkd->wVKey == VK_RETURN)
                pWndCls->EditItem(); // 当按下回车键时,如果ListView未处于重命名模式,则打开编辑对话框
    }
    return false;
}
break;
//......
}

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:449 回複數:0
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-1-23 16:33
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。