2013-03-06 86 views
1

這是一個Windows MFC編程問題。 我有一個派生的CComboBox,它實現了自己的項目繪製和測量。我做了一點改進,下拉列表的寬度可以根據列表內容進行調整。 我在OnDropDown消息處理程序中使用SetDroppedWidth來執行此操作。 插入字符串並單擊組合框後,選定的字符串內容將佔用所有靜態/編輯區域,並且丟失下拉按鈕。 我可以看到項目ID爲-1的項目的寬度在ItemDraw方法中被更改/重置爲新的拖放寬度。我不認爲這是正確的行爲。我希望新的放下的寬度僅對項目ID不小於0的列表項目生效。 任何想法?使用SetDroppedWidth後MFC組合框下拉按鈕丟失

+0

嘗試在初始化組合框項目後調用SetDroppedWidth。我認爲在OnDropDown方法中調用它並不是一個合適的地方 – cha 2013-03-06 22:35:54

+0

但是通過這種方式,組合框的寬度只能調整一次,因爲初始化只被調用一次。 – Buzz 2013-03-07 00:57:06

回答

1

試着使用它。

在您的OnDropDown處理程序中調用CComboBox::GetComboBoxInfo。它會返回你的結構指針COMBOBOXINFO。其他結構包含下拉列表框的HWND。直接在這個hwndList上使用MoveWindow()API,看看它是否有效

如果這樣不行,試試發帖CB_SETDROPPEDWIDTH消息。如您所知,SetDroppedWidth只是CB_SETDROPPEDWIDTH消息的包裝。它作爲SendMessage呼叫實施。試試這個:

::PostMessage(m_myComboBox.GetSafeHwnd(), CB_SETDROPPEDWIDTH, nWidth, 0); 
+0

謝謝!有用。爲什麼選擇PostMessage而不是SendMessage? – Buzz 2013-03-07 23:41:10

+0

通常,當您從消息處理程序發送消息時,會導致各種麻煩。發佈消息只是將其放入消息隊列中。 – cha 2013-03-08 00:10:51