使用SetDroppedWidth后,MFC ComboBox下拉按钮丢失

时间:2013-03-06 22:17:50

标签: windows winapi mfc gdi

这是一个Windows MFC编程问题。 我有一个派生的CComboBox,它实现了自己的项目绘制和测量。我做了一点改进,下拉列表宽度可根据列表内容进行调整。 我在OnDropDown消息处理程序中使用SetDroppedWidth来执行此操作。 插入字符串并单击组合框后,所选的字符串内容占用了所有静态/编辑区域,并且缺少下拉按钮。 我可以看到项目的宽度(项目ID为-1)在ItemDraw方法中被更改/重置为新的删除宽度。我不认为这是正确的行为。我希望新的删除宽度仅对列表项生效,其项ID不小于0。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试使用它。

在OnDropDown处理程序中调用CComboBox::GetComboBoxInfo。它将返回COMBOBOXINFO结构的指针。其他结构包含下拉列表框hwndList的HWND。直接在此hwndList上使用MoveWindow()API,看看它是否有效

如果不起作用,请尝试发布CB_SETDROPPEDWIDTH消息。如您所知,SetDroppedWidth只是CB_SETDROPPEDWIDTH消息的包装器。它被实现为SendMessage调用。试试这个:

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