switch ( nMsg )
{
+ case WM_RBUTTONDOWN:
+ // if the item we are about to right click on
+ // is not already select, remove the entire
+ // previous selection
+ if (!::IsItemSelected(GetHwnd(), htItem))
+ {
+ UnselectAll();
+ }
+
+ // select item and set the focus to the
+ // newly selected item
+ ::SelectItem(GetHwnd(), htItem);
+ ::SetFocus(GetHwnd(), htItem);
+ break;
+
#if !wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE
case WM_LBUTTONDOWN:
if ( htItem && isMultiple )
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() &&