需求:下拉時彈出自定義選擇對話框,選中後顯示在編輯區,並自動收起下拉列表。
CBN_DROPDOWN 處理函數中直接 SendMessage(CB_SHOWDROPDOWN, FALSE) → 無效SendMessage(WM_KILLFOCUS)、SendMessage(WM_KEYDOWN, VK_ESCAPE) → 均失效CBN_DROPDOWN 通知在列表**即將**彈出**前**發送,處理函數返回後列表才真正彈出。此時發送收起消息過早,被後續彈出動作覆蓋。
// 在 CBN_DROPDOWN 處理函數末尾 m_Combo.PostMessage(WM_KEYDOWN, VK_ESCAPE, 0);
PostMessage 而非 SendMessage,消息進入隊列,在當前消息處理完成、列表彈出**後**被處理VK_ESCAPE 為 ComboBox 內部識別的收起鍵,模擬用戶按 Esc 鍵// 在父窗口的 OnKillFocus 中 m_Combo.SendMessage(CB_SHOWDROPDOWN, FALSE, 0); // 注意:若彈出選擇對話框已導致 KillFocus,則不可行