Убить фокус не убить фокус - PullRequest
2 голосов
/ 25 июня 2010

Вот что я делаю. Я создал комбинированный список, но я не использую его для этого. Когда я нажимаю на него, он вызывает trackpopup и вызывает контекстное меню. Однако после того, как я нажал на контекстное меню, я бы хотел, чтобы он закрывал комбинированный список так же, как если бы вы щелкнули где-нибудь (убив фокус) или выбрали элемент в комбинированном списке.

Вот событие для выпадающего списка:

 if(uMsg == WM_COMMAND)
 {

  HMENU m;
  m = CreatePopupMenu();
  MENUITEMINFO itm;
  itm.cbSize = sizeof(MENUITEMINFO);
  itm.fMask = MIIM_FTYPE | MIIM_STRING;
  itm.fType = MIIM_STRING;
  itm.dwTypeData = "Kill time";
  itm.cch = 12;
POINT p;
GetCursorPos(&p);
  InsertMenuItem(m,4,false,&itm);

  if((int)HIWORD(wParam) == CBN_DROPDOWN)
  {
   SendMessage(engineGL.controls.TopSelHwnd,WM_KILLFOCUS,(WPARAM)engineGL.controls.TopSelHwnd,0);
   SendMessage(engineGL.controls.TopSelHwnd,WM_IME_SETCONTEXT,(WPARAM)0,(LPARAM)ISC_SHOWUIALL);

   TrackPopupMenu(m,0,p.x,p.y,NULL,hWnd,NULL);
    SendMessage(hWnd,WM_KILLFOCUS,0,0);

   SetFocus(HWND_DESKTOP);

  }

  return 1;
 } 

Как мне сделать так, чтобы после того, как я щелкнул элемент в контекстном меню, выпадающий список закрывался должным образом, как будто я фактически выбрал элемент из него?

Спасибо

1 Ответ

2 голосов
/ 25 июня 2010

Я не уверен. Нужно попробовать свой код. Однако я уверен, что не следует отправлять сообщение WM_KILLFOCUS вручную. Вместо этого вам нужно установить фокус на другое окно, вызвав SetFocus. ОС автоматически отправит сообщения окну, потерявшему фокус, и новому окну, которое получает фокус.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...