如何在 Win32 中创建带有位图的组合框?
我想创建一个像这样的自定义组合框(如在 MS Word 中),
是否有任何 Win32 API 调用(我不能使用 MFC)来完成这项工作(如 ChooseColor() 或 ChooseFont())?如果没有,任何人都可以告诉我该怎么做吗?谢谢。
问候,
编辑: 创建自绘对话框!!这是唯一的方法吗? http://msdn.microsoft.com/ en-us/library/bb775794%28VS.85%29.aspx#creating_square_meal
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您有一些选择来解决您的问题:
WM_SETFONT
,因此,如果您找到包含您需要的所有行元素的字体,您可以更改组合框控件的字体并用相应的项目填充项目文本。ComboBoxEx
控件将图像与文本组合在一起(请参阅http://msdn.microsoft.com/en-us/library/bb775738(VS.85).aspx)。请注意,将选择项目的哪些部分(只需尝试一下)。如果您可以稍微改变一下对组合框控件的要求,您将能够使用它。GetSysColor
。您应该自行决定哪种方式最适合您的项目要求。
You have some options to solve your problem:
WM_SETFONT
, so if you find a Font which has all line elements which you need, you can change font of the combobox control and fill items with corresponding textes.ComboBoxEx
control which combines images with textes (see http://msdn.microsoft.com/en-us/library/bb775738(VS.85).aspx). Be careful, what part of items will be selected (just try it). If you can a little change your requirements to the combobox control you will be able to use this.GetSysColor
in this case.You should deceide youself whay way is the best for your project requirements.
您可以从 WTL::CComboBox。您必须实现
WM_MEASUREITEM / OCM_MEASUREITEM
的消息处理程序来测量组合框项目的大小WM_DRAWITEM / OCM_DRAWITEM
来完成绘图本身。您实际上并不需要位图,您可以简单地使用 GDI 进行绘制。You can derive from WTL::CComboBox. You'd have to implement the message handlers for
WM_MEASUREITEM / OCM_MEASUREITEM
to do the size measurements of your combo box itemsWM_DRAWITEM / OCM_DRAWITEM
to do the drawing itself. You don't need bitmaps really, you could simply draw using GDI.在 Win32 中,这称为所有者绘制的组合框。在线文档的一个很好的起点是:
http://msdn.microsoft.com/en-us/library/bb775794%28VS.85%29.aspx#creating_owner_drawn
In Win32 this is called a owner-drawn combobox. A good startpoint in the online dicumentation is here:
http://msdn.microsoft.com/en-us/library/bb775794%28VS.85%29.aspx#creating_owner_drawn
这是所有者绘制的组合框的工作代码,其中包含说明。
This is working code of an owner drawn combo-box, instructions within.