2010-06-25 17 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將焦點設置到另一個窗口。操作系統會自動發送消息到失去焦點的窗口和獲得焦點的新窗口。