Windows 使用SetDroppedWidth后,MFC组合框下拉按钮丢失
这是一个Windows MFC编程问题。 我有一个派生的cmbobox,它实现了自己的项目绘制和测量。我做了一点改进,下拉列表的宽度可以根据列表内容进行调整。 我在OnDropDown消息处理程序中使用SetDroppedWidth来完成此操作。 插入字符串并单击组合框后,选定的字符串内容占据了所有静态/编辑区域,并且缺少下拉按钮。 我可以看到项目ID为-1的项目的宽度在ItemDraw方法中被更改/重置为新的删除宽度。我认为这不是正确的行为。我希望新的删除宽度仅对列表项生效,列表项的项ID不小于0。 有什么想法吗?试着用这个 在OnDropDown处理程序调用中。它将返回Windows 使用SetDroppedWidth后,MFC组合框下拉按钮丢失,windows,winapi,mfc,gdi,Windows,Winapi,Mfc,Gdi,这是一个Windows MFC编程问题。 我有一个派生的cmbobox,它实现了自己的项目绘制和测量。我做了一点改进,下拉列表的宽度可以根据列表内容进行调整。 我在OnDropDown消息处理程序中使用SetDroppedWidth来完成此操作。 插入字符串并单击组合框后,选定的字符串内容占据了所有静态/编辑区域,并且缺少下拉按钮。 我可以看到项目ID为-1的项目的宽度在ItemDraw方法中被更改/重置为新的删除宽度。我认为这不是正确的行为。我希望新的删除宽度仅对列表项生效,列表项的项ID不小
COMBOBOXINFO
结构的指针。此结构以及其他结构包含下拉列表框的HWNDhwndList
。直接在此hwndList上使用MoveWindow()API,看看它是否有效
如果不起作用,请尝试发布CB_SETDROPPEDWIDTH
消息。正如您所知,SetDroppedWidth
只是CB_SetDroppedWidth
消息的包装器。它实现为一个SendMessage
调用。试试这个:
::PostMessage(m_myComboBox.GetSafeHwnd(), CB_SETDROPPEDWIDTH, nWidth, 0);
试着用这个
在OnDropDown处理程序调用中。它将返回COMBOBOXINFO
结构的指针。此结构以及其他结构包含下拉列表框的HWNDhwndList
。直接在此hwndList上使用MoveWindow()API,看看它是否有效
如果不起作用,请尝试发布CB_SETDROPPEDWIDTH
消息。正如您所知,SetDroppedWidth
只是CB_SetDroppedWidth
消息的包装器。它实现为一个SendMessage
调用。试试这个:
::PostMessage(m_myComboBox.GetSafeHwnd(), CB_SETDROPPEDWIDTH, nWidth, 0);
初始化组合框项目后,尝试调用SetDroppedWidth。我认为在OnDropDown方法中调用它是不正确的,但是这样,combobox宽度只能调整一次,因为初始化只调用一次。在初始化combobox项后,尝试调用SetDroppedWidth。我认为在OnDropDown方法中调用它是不合适的,但是这样,组合框的宽度只能调整一次,因为初始化只调用一次。谢谢!它起作用了。为什么选择PostMessage而不选择SendMessage?通常,当您从消息处理程序中发送消息时,会导致各种各样的问题。发布消息只会将其放入消息队列中。谢谢!它起作用了。为什么选择PostMessage而不选择SendMessage?通常,当您从消息处理程序中发送消息时,会导致各种各样的问题。发布消息只会将其放入消息队列中。