2016-03-29 34 views
1

我有一個組合框,我需要攔截選擇的更改,而用戶只需通過鼠標懸停鼠標而不更改單擊即可更改選擇。這是爲了顯示有關用戶懸停在其上的項目的補充信息。組合框中的熱追蹤列表項選擇

CBN_SELCHANGE不會做的工作,因爲這個消息被解僱,只有當用戶有實際上通過點擊組合框項目之一或在上/下鍵被按下改變選擇。

顯然,當用戶剛懸停在組合框中沒有消息被觸發。

插圖

E.g:我需要當用戶從入門2到入口33移動鼠標就知道了。

enter image description here

+0

我不能讓我的平原Win32的組合框熱點追蹤鼠標。你如何管理它? –

+0

@DavidHeffernan,我不能。這其實是一個問題:如何熱追蹤。 –

+0

所以,你想修改標準組合框的行爲,使其熱軌?就用戶體驗而言,這是一個非常糟糕的主意。 –

回答

1

這是基於你提到c# article C++子類:

LRESULT CALLBACK ComboProc(HWND hwnd, UINT msg, WPARAM wParam, 
    LPARAM lParam, UINT_PTR uIdSubClass, DWORD_PTR) 
{ 
    if (msg == WM_CTLCOLORLISTBOX) 
    { 
     COMBOBOXINFO ci = { sizeof(COMBOBOXINFO) }; 
     GetComboBoxInfo(hwnd, &ci); 
     if (HWND(lParam) == ci.hwndList) 
     { 
      int pos = SendMessage(ci.hwndList, LB_GETCURSEL, 0, 0); 
      OutputDebugStringA(std::to_string(pos).c_str()); 
      OutputDebugStringA("\n"); 
     } 
    } 

    if (msg == WM_NCDESTROY) 
    { 
     RemoveWindowSubclass(hwnd, ComboProc, uIdSubClass); 
    } 

    return DefSubclassProc(hwnd, msg, wParam, lParam); 
} 

... 
SetWindowSubclass(hComboBox, ComboProc, 0, 0); 

這是在Windows 10

測試這隻能報告懸停選擇在下拉列表中,它不能改變選擇。

相關問題