如何影响COMBOBOX窗口类的定义

How to affect definition of COMBOBOX window class

本文关键字:窗口 定义 COMBOBOX 何影响 影响      更新时间:2023-10-16

我有一个CComboBox的子类,它在两个不同的上下文-两者都在本机C++中。在工作(测试)上下文中,创建了顶级应用程序使用VS2008。在非工作情况下,应用程序要复杂得多并且可能最初是由早期的VS版本创建的。

在失败的情况下,控件不会显示下拉框,而是响应上/下箭头键控制。同样在失败的情况下,它总是返回零当使用GetMinVisible进行查询时,并且总是从SetMinVisibleItems

问题似乎源于COMBOBOX窗口的定义班在这两种情况下,我都转储了从::GetClassInfoEx返回的数据。除了wndProc的地址之外,还有两个区别。第一,工作案例设置了样式CS_GLOBALCLASS,而失败案例没有。此外工作情况指定4字节的额外窗口存储(cbWndExtra),而失败情况指定8个字节。

所以我的问题是:1)什么配置属性可能会影响CCD_ 9窗口类?,以及2)如果我创建自己的窗口类,我如何确定要使用的正确wndProc?

编辑:下拉框的行为会随着常规属性选项卡中character set属性的指定而更改。如果character setunicode,它会正常工作,而如果是not set,它会失败。组合框子类在ActiveX控件中,但应用程序级别的设置似乎会影响窗口类,这最终会扰乱ActiveX控件中的组合框。有趣的是,在应用程序的其他地方还有其他组合框,尽管是在对话框中,但它们的行为似乎很好。

SetMinVisibleItems使用CB_SETMINVISIBLE,并且它需要comctl32 v6,这表明这是一个视觉样式问题。

旧的通用控件版本的组合框实际上使用控件高度作为下拉列表的大小,因此如果您进行调整,您可能可以在不添加清单的情况下修复它。