BitmapPickerComboEx - 一个漂亮的带分区的组合框
用于创建带有图标和节标题的组合框下拉列表的控件。
介绍
这个ComboBox
样式控件具有一个带有图标和标题的漂亮的下拉列表。 如果你有一个ComboBox
,其中包含有限的、预定义的选项列表,并且可以将这些选项分组到不同的部分,那么它会很有用。 典型的用途包括项目类型、文档类型等。
屏幕截图
截图:BitmapPickerComboEx
的示例用法,来自我的 文件同步软件。
基本用法
你会在ComboBox
中找到三个元素
- 标题(粗体,无图标)
- 条目(带有图标)
- 空白行
设置
控件
ComboBox
控件的设置方式与自定义控件的常规步骤相同
- 在资源编辑器中:在你的对话框中创建一个
ComboBox
。 - 在
ComboBox
属性中使用OwnerdrawnVariable
和HasStrings
选项 - 在你的*.h 文件中:添加这一行 "
CBitmapPickerCombo m_Combox;
" - 在你的*.cpp 文件中:在
DoDataExchange
中添加这一行 "DDX_Control(pDX, IDC_COMBO1, m_Combox);
"。 (IDC_COMBO1
中的数字可能会有所不同。 检查ComboBox
属性。) - 将文件BitmapPickerCombo.cpp 和 BitmapKeyed.cpp 添加到你的项目中。
位图
如果你想在ComboBox
中显示它们,该控件需要位图。 对于每个图像
- 在资源编辑器中:创建一个带有黑色背景的
Bitmap
,并创建一个键位图(相同的对象),该位图具有白色背景和黑色像素,而不是颜色。 - 在你的*.h 文件中:添加这一行 "
CBitmapKeyed bitmap
" (当然,每次使用不同的名称) - 使用 "
bitmap.Init (this, NULL, IDB_YOURIMAGE, IDB_YOURIMAGEKEY);
" 初始化每个位图
填充数据
创建标题
m_Combox.AddBitmap (NULL, "Headline");
创建条目
m_Combox.AddBitmap (&bitmap, "Item");
(有关“bitmap”的说明,请参见上方。)
创建空白行
m_Combox.AddBitmap (NULL, "");
处理无效选择
请注意,用户可以选择以上任何一种行类型。 我尝试过使标题和空白行不可选择,但这使得使用光标键选择变得不可能。 我建议检查无效选择(例如空白行),并在这种情况下禁用对话框中的“确定”按钮。
致谢
这段代码很大程度上基于 Anneke Sicherer-Roetman 的 BitmapPickerCombo
(也在 The Code Project 上可用)。 我只是做了一些修改使其看起来更美观,所以我只能声称贡献了一小部分功劳。 感谢 Anneke。
历史
- 2009 年 1 月 22 日:初始发布