1

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

4

1 回答 1

1

尝试使用这个。

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

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

::PostMessage(m_myComboBox.GetSafeHwnd(), CB_SETDROPPEDWIDTH, nWidth, 0); 
于 2013-03-07T01:07:40.013 回答