如何映射停靠工具栏中的ComBoBox中的OnSelectChange消息

发表于:2007-06-17来源:作者:点击数: 标签:
请问如何映射停靠工具栏中的ComBoBox中的OnSelectChange消息? 注意我的停靠工具栏的类是CMyDialogBar,其基类是CDialogBar,并且程序中涉及到Doc/View体系,我的目的是要当用户改变了停靠工具栏中的ComBoBox中的选项是,程序能对特定的文档在客户区进行读写,编辑

          请问如何映射停靠工具栏中的ComBoBox中的OnSelectChange消息?

注意我的停靠工具栏的类是CMyDialogBar,其基类是CDialogBar,并且程序中涉及到Doc/View体系,我的目的是要当用户改变了停靠工具栏中的ComBoBox中的选项是,程序能对特定的文档在客户区进行读写,编辑操作,请问这个ComBoBox中的OnSelectChange消息应该在哪儿映射好?应该为ComBo加上什么变量?我的Program是一个SDI程序,我选择的基类是CEditView

CDialogBar好像叫对话条吧,工具栏是CtoolBar。CDialogBar上控件的消息一般都由他的父窗口棗CMainFrame处理。
1 在CMainFrame的类声明中添加CComboBox成员变量m_cboMyTest;
2 在CMainFrame的类声明中添加消息处理函数:
afx_msg void OnSelChangeCbobox();//(名字随便取)
3 在CMainFrame的OnCreate()函数中添加:
m_cboMyTest.SubclassDlgItem(IDC_CBO_CBOBOX,&m_wndDlgMyDialogBar);
IDC_CBO_CBOBOX为ComboBox的资源ID。&m_wndDlgMyDialogBar为对话条变量。

4 在CMainFrame的映射表中的//}}AFX_MSG_MAP下面添加
ON_CBN_SELCHANGE(IDC_CBO_CBOBOX,OnSelChangeCbobox)。
5 完成CMainFrame::OnSelChangeCbobox()函数。

可以在View中,也可以在Frame中,看看你的程序中要用到哪些变量,比如你要用到View的变量多些,就可以考虑放到View中.

如何在View类中映射停靠对话条中ComBoBox中的ON_CBN_SELCHANGE消息?

假如:

我的View类是CMyView,父类CEditView

    我的对话条类是CMyDialogBar,父类CDialogBar
    我的ComBoBox控件ID是:IDC_COMBO_ONE

project:   

afx_msg void OnSelchangeComboone();

在.cpp中:
BEGIN_MESSAGE_MAP(CMyView, CView)

ON_CBN_SELCHANGE(IDC_COMBO_ONE, OnSelchangeComboone)
END_MESSAGE_MAP()
void CMyView::OnSelchangeComboone()
{
}

在CDialogBar中对于CComboBox一类的控件,ON_CBN_SELCHANGE消息是不会做出响应的,编译器认为其不是一个窗口类!正确的做法是利用VC6中的CReBar的特殊功能AddBar(&m_comboBoxCtrl)来实现,方法同楼上的做法,手工加入ON_CBN_SELCHANGE消息;如果是用的VC5,则只好利用CToolBar进行派生,建立CComboBox成员,手工建立ComboBoa,加入ON_CBN_SELCHANGE消息

原文转自:http://www.ltesting.net