X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bf43d750e66d491255c090dd0336c46def997178..24f588af92d50c77142e299ff66ba45b88915c8c:/src/msw/treectrl.cpp?ds=sidebyside diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index ffba0255fa..d4a3025c38 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -2294,12 +2294,26 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) eventType = wxEVT_COMMAND_TREE_KEY_DOWN; TV_KEYDOWN *info = (TV_KEYDOWN *)lParam; - // we pass 0 as 2 last CreateKeyEvent() parameters because we - // don't have access to the real key press flags here - but as - // it is only used to determin wxKeyEvent::m_altDown flag it's - // not too bad + // fabricate the lParam and wParam parameters sufficiently + // similar to the ones from a "real" WM_KEYDOWN so that + // CreateKeyEvent() works correctly + WXLPARAM lParam = + (::GetKeyState(VK_MENU) & 0x100 ? KF_ALTDOWN : 0) << 16; + + WXWPARAM wParam = info->wVKey; + + int keyCode = wxCharCodeMSWToWX(info->wVKey); + if ( !keyCode ) + { + // wxCharCodeMSWToWX() returns 0 to indicate that this is a + // simple ASCII key + keyCode = wParam; + } + event.m_evtKey = CreateKeyEvent(wxEVT_KEY_DOWN, - wxCharCodeMSWToWX(info->wVKey)); + keyCode, + lParam, + wParam); // a separate event for Space/Return if ( !wxIsCtrlDown() && !wxIsShiftDown() &&