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