当前位置:  开发笔记 > 编程语言 > 正文

如何使用python win32gui启用制表符和箭头键

如何解决《如何使用pythonwin32gui启用制表符和箭头键》经验,为你挑选了0个好方法。

我在主窗口中创建了几个按钮(窗口),但是Tab键和箭头键不起作用.我的研究表明,对于C++,在消息泵中使用IsDialogMessage创建了TranslateMessage/DispatchMessage的旁路,如下所示,以允许此功能:

while(GetMessage(&Msg, NULL, 0, 0))
{
    if(!IsDialogMessage(g_hToolbar, &Msg))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
}

但是,我正在使用python和win32gui模块来创建CreateWindows,我无法弄清楚如何绕过正常的消息捕获以允许自然处理键盘.我的代码与此类似:

from win32gui import *
from win32con import *

window_class = WNDCLASS()
hinst = window_class.hInstance = GetModuleHandle(None)
window_class.lpszClassName = 'ClassName'
window_class.style = CS_VREDRAW | CS_HREDRAW
window_class.hCursor = LoadCursor(0, IDC_ARROW)
window_class.hbrBackground = COLOR_WINDOW
window_class.lpfnWndProc = {}
classAtom = RegisterClass(window_class)

hwnd = CreateWindow(classAtom, "", WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION
                    | WS_SYSMENU | WS_MINIMIZEBOX | WS_EX_TOPMOST | WS_CLIPSIBLINGS,
                    0, 0, 140, 100, 0,  0, GetModuleHandle(None), None)
btn1_hwnd = CreateWindow("Button", "btn 1", WS_GROUP | WS_TABSTOP | WS_VISIBLE
                         | WS_CHILD | BS_DEFPUSHBUTTON | WS_CLIPSIBLINGS,
                         10, 10, 100, 20, hwnd, 0, GetModuleHandle(None), None)
btn2_hwnd = CreateWindow("Button", "btn 2", WS_GROUP | WS_TABSTOP | WS_VISIBLE
                         | WS_CHILD | BS_DEFPUSHBUTTON | WS_CLIPSIBLINGS,
                         10, 40, 100, 20, hwnd, 0, GetModuleHandle(None), None)

UpdateWindow(hwnd)
PumpMessages()

编辑:使用此代码,创建一个带有两个按钮的窗口,但不能将焦点从一个移动到另一个,尽管它们都有WS_TABSTOP标志.

根据MSDN IsDialogMessage规范,上面的C++代码段是解决方案.

当IsDialogMessage处理消息时,它会检查键盘消息并将其转换为相应对话框的选择.例如,按下TAB键时,选择下一个控件或一组控件,按下DOWN ARROW键,选择组中的下一个控件.

由于IsDialogMessage函数执行所有必要的消息转换和分派,因此不能将IsDialogMessage处理的消息传递给TranslateMessage或DispatchMessage函数.

所以,基本上,问题是:可以IsDialogMessage从Python的win2gui中使用,还是有一些解决方法?

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有