2010-06-25 5 views
2

여기 제가하고있는 것이 있습니다. 나는 콤보 박스를 만들었지 만 그것을 위해 사용하지는 않습니다. 그것을 클릭하면, 그것은 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; 
} 

가 어떻게 그것을 만들 수 있습니다, 콤보 상자가 제대로 종료 ?

감사합니다.

답변

2

잘 모르겠습니다. 코드를 사용해 봐야합니다. 그러나 나는 수동으로 WM_KILLFOCUS 메시지를 보내면 안된다고 확신합니다. 대신 SetFocus을 호출하여 다른 창으로 포커스를 설정해야합니다. OS는 포커스를 잃는 창과 포커스를 얻는 새 창에 메시지를 자동으로 보냅니다.

관련 문제