翻译来源:https://www.codeproject.com/Articles/6518/Skin-the-ComboBox-in-simple-function-calls
作者:Ashok Jaiswal
设置组合框的下拉列表中的组合框的皮肤。
介绍
这是一个简单的子类控件CComboBox
,允许您将皮肤应用于组合框及其下拉框。使用的皮肤可以是像素宽(为了背景和角落),以保持控制光。
CComboBox覆盖
以下函数被覆盖(就像大多数子类控件一样)。这很容易理解。
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
afx_msg void OnPaint(); afx_msg void OnDestroy();
afx_msg LRESULT OnCtlColorListBox(WPARAM wParam, LPARAM lParam);
以下功能取自Code Project中的multicombobox项目(对不起,我忘记了作者和链接)。
afx_msg LRESULT OnCtlColorListBox(WPARAM wParam, LPARAM lParam);
如何使用
使用起来非常简单。在对话框中添加一个组合框,创建一个CComboBox
类型的成员变量,将对象类型更改CBitComboBox
为对话框头文件,然后在资源中添加位图,以使皮肤组合。
将头文件更改为如下所示:
包含BitComboBox
标题:
#include "BitComboBox.h"
控件类更改CBitComboBox
的CComboBox
。
CBitComboBox m_cmbBitmap;
在CBitComboBox
类中调用以下函数来设置皮肤位图的资源ID OnInitDialog
(或在创建组合框之前的项目中的任何位置)。
m_cmbBitmap.SetComboBitmap(IDB_COMBO_LEFT, IDB_COMBO_RIGHT,IDB_COMBO_CEN); m_cmbBitmap.SetComboListBitmap(IDB_LIST_LEFT, IDB_LIST_RIGHT,IDB_LIST_TOP,IDB_LIST_BOT); m_cmbBitmap.SetHighlightColor(RGB(115,138,174), RGB(255,255,255)); m_cmbBitmap.SetNormalPositionColor(RGB(115,138,154), RGB(255,255,255));
什么不见了
有以下事情丢失,如果有人可以完成他们请让我知道:
- 如果没有皮肤设置,默认组合框应该出现(可以通过简单地
CComboBox
从覆盖调用函数来完成)。 - 我还没有实现对组合框的编辑控件的外观(可在做
OnCtrlColor
的CBitComboBox
)。