C++ CComboBox的自定义下拉列表

C++ CComboBox的自定义下拉列表,c++,mfc,controls,C++,Mfc,Controls,我正在尝试为cmbobox的派生项创建一个自定义下拉列表。下拉菜单将是日历控件加上一些“热点”,例如 因此,我认为实现这一点的最佳方法是使用一个简单的CWnd派生类作为日历控件的父类,并让它自己绘制热点 该窗口需要是一个弹出窗口-我想-而不是一个子窗口,这样它就不会被剪辑。但这样做会导致对话框(combobox控件所在的对话框)不再是最顶部(前台?)窗口,从而导致其框架的绘制方式不同: 这破坏了下拉菜单是组合框一部分的错觉,因为此时它的行为更像一个模态对话框关于如何使自定义下拉菜单像常规下拉

我正在尝试为
cmbobox
的派生项创建一个自定义下拉列表。下拉菜单将是日历控件加上一些“热点”,例如

因此,我认为实现这一点的最佳方法是使用一个简单的
CWnd
派生类作为日历控件的父类,并让它自己绘制热点

该窗口需要是一个弹出窗口-我想-而不是一个子窗口,这样它就不会被剪辑。但这样做会导致对话框(combobox控件所在的对话框)不再是最顶部(前台?)窗口,从而导致其框架的绘制方式不同:

这破坏了下拉菜单是组合框一部分的错觉,因为此时它的行为更像一个模态对话框关于如何使自定义下拉菜单像常规下拉菜单一样工作,有什么建议吗?


是否还有其他陷阱需要注意,例如焦点和鼠标捕获问题?创建弹出窗口时,需要指定其所有者。当您激活自己的弹出窗口时,这些窗口将激活其所有者。不指定所有者将导致您的窗口被激活,从而导致您看到的所有者发生更改。

是的,我曾经遇到过这个问题。快速的谷歌搜索让我怀疑我通过使用CreateWindowEx()并指定WS_EX_NOACTIVATE解决了这个问题。我有一些其他代码通过使用WS_EX_TOOLWINDOW而不是作为弹出窗口来实现相同的效果,但我不确定为什么会这样做,我的直觉告诉我,把它变成一个弹出窗口是一个不错的选择。

你可以在下面的链接中找到两个示例项目,它们将CTreeCtrl或CListCtrl控件放在CmboBox下拉窗口中。。。类似的,你可以把你需要的东西放在那里。以下是链接:


我希望这对你有帮助。

谢谢你的回答。在调用CreateEx时,我将combobox作为下拉窗口的“父级”传递。当显示下拉窗口时,会导致对话框框架的更改。显式调用SetOwner没有任何区别。