Maya插件新线程Popup窗口切换回调异常及点击监听求助
Maya插件Popup窗口焦点监听问题
问题场景
在Maya插件的新线程中创建Popup窗口,无法在切换到该窗口时收到正确的焦点回调。
创建Popup窗口代码
hWnd = CreateWindow( "Sample", "Sample", WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, hInstance, NULL);
焦点事件监听实现
通过SetWinEventHook监听EVENT_SYSTEM_FOREGROUND事件,用于判断窗口是否获得焦点:
windowsEventHook = SetWinEventHook( EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, // Range of events (4 to 5). NULL, // Handle to DLL. selectMayaObjectOnActiveWindowCallback, // The callback. 0, 0, // Process and thread IDs of interest (0 = all) WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS); // Flags.
回调函数定义
void CALLBACK selectMayaObjectOnActiveWindowCallback(HWINEVENTHOOK hook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
核心问题
- 点击Maya主窗口缩略图和自定义Popup窗口缩略图时,回调传入的
idObject、idChild、dwEventThread参数完全一致,无法区分。 - 点击Popup窗口时,回调传入的
HWND与创建的窗口实例不匹配,此时窗口标题为TaskListThumbnailWnd。
已尝试的无效方案
- 用
GetCurrentThreadId()限制回调仅响应当前进程ID。 - 通过窗口标题判断(但缩略图窗口标题固定为
TaskListThumbnailWnd)。 - 调用
getActiveWindow()、getForegroundWindow()、GetWindow(hwnd, GW_ENABLEDPOPUP)、getFocus()等函数尝试获取正确窗口句柄。
求助问题
能否直接给HWND实例设置点击监听器?或者有其他可靠方法判断自定义Popup窗口是否被点击?
内容的提问来源于stack exchange,提问作者Doug Ray
相关产品推荐
相关产品推荐

