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() &&
// an image depending on the expanded/collapsed state - bug in
// comctl32.dll or our code?
{
- NM_TREEVIEW* tv = (NM_TREEVIEW*)lParam;
- if ( tv->action == TVE_EXPAND )
- {
- wxTreeItemId id = (WXHTREEITEM)tv->itemNew.hItem;
+ NM_TREEVIEW* tv = (NM_TREEVIEW *)lParam;
+ wxTreeItemId id = (WXHTREEITEM)tv->itemNew.hItem;
- int image = GetItemImage(id, wxTreeItemIcon_Expanded);
- if ( image != -1 )
- {
- RefreshItem(id);
- }
+ int image = GetItemImage(id, wxTreeItemIcon_Expanded);
+ if ( image != -1 )
+ {
+ RefreshItem(id);
}
}
break;
case TVN_GETDISPINFO:
// NB: so far the user can't set the image himself anyhow, so do it
// anyway - but this may change later
-// if ( /* !processed && */ 1 )
+ //if ( /* !processed && */ 1 )
{
wxTreeItemId item = event.m_item;
TV_DISPINFO *info = (TV_DISPINFO *)lParam;