65.9K
CodeProject 正在变化。 阅读更多。
Home

BitmapPickerComboEx - 一个漂亮的带分区的组合框

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (5投票s)

2009年1月22日

CPOL

2分钟阅读

viewsIcon

41837

downloadIcon

2058

用于创建带有图标和节标题的组合框下拉列表的控件。

介绍 

这个ComboBox 样式控件具有一个带有图标和标题的漂亮的下拉列表。 如果你有一个ComboBox ,其中包含有限的、预定义的选项列表,并且可以将这些选项分组到不同的部分,那么它会很有用。 典型的用途包括项目类型、文档类型等。

屏幕截图

截图:BitmapPickerComboEx 的示例用法,来自我的 文件同步软件

基本用法

你会在ComboBox 中找到三个元素

  • 标题(粗体,无图标)
  • 条目(带有图标)
  • 空白行

设置

控件

ComboBox 控件的设置方式与自定义控件的常规步骤相同

  1. 在资源编辑器中:在你的对话框中创建一个ComboBox
  2. ComboBox 属性中使用OwnerdrawnVariable HasStrings 选项
  3. 在你的*.h 文件中:添加这一行 "CBitmapPickerCombo m_Combox;"
  4. 在你的*.cpp 文件中:在DoDataExchange 中添加这一行 "DDX_Control(pDX, IDC_COMBO1, m_Combox);"。 (IDC_COMBO1 中的数字可能会有所不同。 检查ComboBox 属性。)
  5. 将文件BitmapPickerCombo.cppBitmapKeyed.cpp 添加到你的项目中。

位图

如果你想在ComboBox 中显示它们,该控件需要位图。 对于每个图像

  1. 在资源编辑器中:创建一个带有黑色背景的Bitmap ,并创建一个键位图(相同的对象),该位图具有白色背景和黑色像素,而不是颜色。
  2. 在你的*.h 文件中:添加这一行 "CBitmapKeyed bitmap" (当然,每次使用不同的名称)
  3. 使用 "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 日:初始发布
© . All rights reserved.