读书人

奇怪~关于combobox的有关问题,帮忙看看

发布时间: 2012-02-15 12:09:44 作者: rapoo

奇怪~~关于combobox的问题,帮忙看看
我用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消息

我搞了一个晚上,没有搞懂,希望各位兄弟给点意见。

[解决办法]
帮你顶
[解决办法]
如果只是dropdown list不会有WM_CTLCOLOREDIT消息.
[解决办法]
那拦截一下WM_CTLCOLORSTATIC试试呢, 能得到吗?

读书人网 >VC/MFC

热点推荐