描述:
我用atl 做一个控件 (not support to mfc),我加了一个属性页,
在属性页上我用combobox 做一个颜色选择框.
我遇到的问题是
做成类后,combobox只在其下拉列表中画出颜色,而在combobox显示框(edit)中没有任何效果.........why??????
combobox 的属性设置为 CBS_DROPDOWNLIST|CBS_HASSTRINGS|CBS_OWNERDRAWFIXED
如果我在属性页类中直接使用
BEGIN_MSG_MAP(CXXXProp)
....
MESSAGE_HANDLER(WM_DRAWITEM, OnDrawItem)
....
这样没有问题,效果也出来了. 在combobox下拉列表中选择任何颜色,它将出现在combobox显示框(Edit)上
因为不止一个这样的combobox,我要把combobox做成一个类,
我测试3种方式,都有一样的问题:
//-----------超类化---------
class CMyComboBox : public CWindowImpl<CMyComboBox>
{
public:
CMyComboBox ();
virtual ~CMyComboBox ();
DECLARE_WND_SUPERCLASS(_T("MyComboBox "), _T("COMBOBOX"))
...
BEGIN_MSG_MAP(CMyComboBox )
MESSAGE_HANDLER(WM_DRAWITEM, OnDrawItem)
...
CMyComboBox m_MyComboBox;
m_MyComboBox.Create(*this, rccombox,L"MyComboBox",WS_VISIBLE | CBS_DROPDOWNLIST|WS_CHILD|CBS_OWNERDRAWFIXED , 0, 0);
combobox显示不出选中的颜色
//--------------子类化--------------------
同样,稍微改动类代码,子类化后
m_MyComboBox.SubclassWindow(GetDlgItem(IDC_test12) );
结果仍然相同
//----------------------------------
现在我有调头作了一个测试
我在属性页类中定义 CContainedWindow m_MyComboBox;
CXXXProp::CXXXProp() : m_MyComboBox(_T("COMBOBOX"), this, 1)
...
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_DRAWITEM, OnDrawItem)
...
发现也出现同样问题。
ps:做成类后WM_CTLCOLOREDIT不被触发,只有WM_CTLCOLORLISTBOX消息
我搞了一个晚上,没有搞懂,希望各位兄弟给点意见。
解决方案1:
那拦截一下WM_CTLCOLORSTATIC试试呢, 能得到吗?
解决方案2:帮你顶
解决方案3:如果只是dropdown list不会有WM_CTLCOLOREDIT消息.
您可能想查找下面的文章:
- 请问我在combobox里面处理退格健,该怎么判断光标处什么哪个字符之间,怎么删去前一个字符呢?
- WTL,CCodePageCombo继承CComboBoxT<ATL::CWindow>类,需要响应下拉菜单CloseUp的消息
- combobox输入中文显示乱码问题
- 各位求助!在IEtoolbar中添加了ComboBox,只能输入英文,不能backspace,字符只能前插?
- 想用Word2007的RibbonComboBox/RibbonDropDown等类,不知道要#import那个类型库或者DLL
- 怎样在active控件属性中关联CCombobox控件
- 在ActiveX里怎么获取combobox下拉改变值?
- CComboBox插入数据AddString的问题
- MFC判断控件Z轴序列
- Combobox的Activex实现