这是基本的.
当用户从CComboBox
(实际上是子类CComboBox
)中选择一个项时,我想要捕获.
试过很多组合OnCblSelChange
,OnCommand
.猜猜我还没有打到正确的组合(没有双关语意).
操作系统是Vista,但我正在强制进行XP风格的对话(这应该不重要,不是吗?)
我能够捕获从CEdit
和派生的类的事件CFileDialog
.
我在这里结束了我的智慧.任何援助都将永远受到赞赏.
当然,任何源代码都会比以往更受欢迎.
不幸的是,似乎所有SELEND_OK
用于组合框更改的消息(偶数)都是在文本实际更改之前发送的,因此DoDataExchange
将为您提供之前的文本CComboBox
.我按照MSDN的建议使用了以下方法:
void MyDialog::DoDataExchange(CDataExchange* pDX) { DDX_Text(pDX, IDC_COMBO_LOCATION, m_sLocation); CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(MyDialog, CDialog) ON_CBN_SELENDOK(IDC_COMBO1, &MyDialog::OnComboChanged) ON_CBN_EDITUPDATE(IDC_COMBO1, &MyDialog::OnComboEdited) // This one updates immediately END_MESSAGE_MAP() ... void MyDialog::OnComboChanged() { m_myCombo.GetLBText(m_myCombo.GetCurSel(), m_sSomeString); } void MyDialog::OnComboEdited() { UpdateData(); }
它看起来工作得很好.