我有一个CComboBox
的子类,它在两个不同的行为方面有所不同
上下文 - 都在本机C ++中。在工作(测试)上下文中创建了顶级应用程序
使用VS2008。在非工作情况下,应用程序要复杂得多
并且最初可能是由早期的VS版本创建的。
在失败的情况下,控件不会显示下拉框,但会响应
上/下箭头键控制。同样在失败的情况下,它总是返回零
使用GetMinVisible
查询时始终返回失败
SetMinVisibleItems
。
问题似乎源于COMBOBOX
窗口的定义
类。在这两种情况下,我都转储了从::GetClassInfoEx
返回的数据。
除wndProc
的地址外,还有两个不同之处。一,工作
case设置了样式CS_GLOBALCLASS
,而故障情况则没有。还有
工作案例指定4个字节的额外窗口存储(cbWndExtra
)
失败案例指定8个字节。
所以我的问题是:1)哪些配置属性可能会影响定义
COMBOBOX
窗口类?,以及2)如果我创建自己的窗口类,如何确定要使用的正确wndProc?
编辑:下拉框的行为随着常规属性选项卡中character set
属性的规范而变化。如果character set
为unicode
,则按预期工作,not set
时失败。组合框子类在ActiveX控件中,但是应用程序级别的设置似乎会影响窗口类,这会弄乱ActiveX控件中的组合框。有趣的是,在应用程序的其他地方,还有其他组合框,虽然在对话框中,似乎表现得很好。
答案 0 :(得分:0)
SetMinVisibleItems使用CB_SETMINVISIBLE,它需要comctl32 v6,这是你的线索,这是一个视觉样式问题。
组合框的较旧公共控件版本实际上使用控件高度作为下拉列表的大小,因此如果您调整它,则可以在不添加清单的情况下修复它。