CComboBox的自定义下拉列表

时间:2010-04-11 07:34:04

标签: c++ mfc controls

我正在尝试为CComboBox的衍生产品创建自定义下拉列表。下拉列表将是日历控件加上一些“热点”,例如

Image Hosted by ImageShack.us http://img59.imageshack.us/img59/394/calctrl.png

所以我认为实现这一目标的最佳方法是拥有一个简单的CWnd派生类,它充当日历控件的父级,并让它自己绘制热点。

窗口需要是一个弹出窗口 - 我认为 - 而不是子窗口,因此它不会被剪裁。但这样做会导致对话框(放置组合框控件)停止在最顶层(前景?)窗口,导致其框架被绘制得不同:

alt text http://img693.imageshack.us/img693/3474/35148785.png

这破坏了下拉是组合框的一部分的错觉,因为此时它的行为更像是模态对话。 有关如何制作自定义下拉列表的任何建议都与常规下拉列表相似?

我还需要注意其他任何陷阱,例如焦点和鼠标捕获问题?

3 个答案:

答案 0 :(得分:0)

创建弹出窗口时,需要指定其所有者。拥有的弹出窗口将在您激活它们时激活其所有者。未指定所有者将导致您的窗口被激活,这会导致您所看到的所有者发生更改。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以在以下链接中找到两个示例项目,这些示例项目在CComboBox下拉窗口中放置了CTreeCtrl或CListCtrl控件……类似,您可以在其中放置任何内容。这是链接:

Tree ComboBox Control

List ComboBox Control

希望对您有帮助。