2016-03-29 49 views
1

私はコンボボックスを持っています。ユーザがをクリックするだけで、マウスでホバリングするだけで選択範囲を変更する必要があります。をクリックしないでください。これは、ユーザがホバリングしているアイテムに関する相補的な情報を表示するためのものです。このメッセージは、ユーザーがが実際には、コンボボックスの項目のいずれかまたは時にアップ/ダウンキーが押されたをクリックして選択を変更したときにのみトリガーされますので、コンボボックスでホットリスト項目を選択

CBN_SELCHANGEは、仕事をしないであろう。

ユーザーがコンボボックスの上にマウスを乗せている間は、明らかにメッセージは表示されません。

イラスト

例えば:私は、ユーザーがエントリ33にエントリー2からマウスを移動したときに知っておく必要があります。

enter image description here

+0

私の普通のwin32コンボボックスをマウスでホットトラックにすることはできません。どのようにそれを管理していますか? –

+0

@DavidHeffernan、できません。それは実際問題です。ホットトラックする方法。 –

+0

標準のコンボボックスの動作をホットトラックに変更したいのですか?これはUXに関しては本当に悪い考えです。 –

答えて

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上で

をテストしたこれは、ドロップダウンリストでホバー選択を報告することができ、選択を変更することはできません。

関連する問題