在我的应用程序中,我有一个使用wxWindow创建的父窗口,并且有一个子窗口,我正在进行渲染,这个窗口是使用SDL 2.0创建的。 因此,一旦我将SDL窗口设置为使用SetParent调用的wxWindow的子节点,所有键盘事件(如按键,键释放等)将转到子窗口而不是父窗口。
以下是虚拟代码:
wxWindow * pParentWindow = new wxWindow();
SDL_Window * pChildWindow = SDL_CreateWindow(" Player",100,100,nWindowWidth,nWindowHeight,SDL_WINDOW_SHOWN);
SDL_SysWMinfo SysInfo; //将保存子窗口信息 SDL_GetWindowWMInfo(pChildWindow,& SysInfo);
HWND SDLHandle = SysInfo.info.win.window;
SetParent(SDLHandle,(HWND)pParentWindow);
在此之后SDL窗口成为wxWindow的子项,现在每当我按任意键时,此事件将仅转到子(SDL)窗口。但是我在父窗口中要求这些事件。
所以任何人都可以告诉我如何在我的父窗口(wxWindow)而不是SDL窗口中获取这些事件,或者将它传播到父窗口。
注意:我使用的是wxWidget 2.8和SDL 2.0。
答案 0 :(得分:2)
如果所有其他方法都失败了(即你无法让SDL和wxWidgets很好地播放),你可以考虑挂钩键盘。
/**
Callback for low level keyboard hook
*/
LRESULT CALLBACK keyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) (lParam);
// If key is being pressed
if (wParam == WM_KEYDOWN) {
switch(p->vkCode) {
...
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
// Set windows hook
HHOOK keyboardHook = SetWindowsHookEx(
WH_KEYBOARD_LL,
keyboardHookProc,
GetModuleHandle (0),
//hInstance,
0);
if( ! keyboardHook ) {
printf("Keyboard hook failed\n");
}