CBN_SELENDOK
должно быть сообщением, которое вы ищете. Он отправляется после завершения выбора пользователя, но до закрытия поля со списком (если это так). CBN_SELCHANGE
отправляется до выбор фактически сохраняется в элементе управления поля со списком.
Эта ссылка MSDN содержит больше информации (вы, вероятно, уже видели это ...)
Вот код, который я вам обещал. Одна вещь, которую я заметил, собирая это, это то, что возможно подавить это сообщение, если вы используете обработчик ON_CONTROL_REFLECT
в классе, производном от CComboBox
. Это заставит сам элемент управления обрабатывать сообщение и не передавать его родителю. Вы можете обойти эту проблему, используя ON_CONTROL_REFLECT_EX
с правильным кодом возврата, который заставит и сам ящик, и родительский элемент получить сообщение.
В любом случае, вот фрагмент кода:
class SPC_DOCK_CLASS ProcessingExceptionDockDlg : public CSPCDockDialog
{
SPC_DOCK_DECLARE_SERIAL(ProcessingExceptionDockDlg);
public:
// ... redacted ...
//{{AFX_DATA(ProcessingExceptionDockDlg)
CComboBox m_comboFilter;
//}}AFX_DATA
//{{AFX_VIRTUAL(ProcessingExceptionDockDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL
protected:
//{{AFX_MSG(ProcessingExceptionDockDlg)
afx_msg void OnSelendokComboTreeFilter();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/****************/
// ProcessingExceptionDockDlg.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "ProcessingExceptionDockDlg.h"
// ... much code redacted ...
void ProcessingExceptionDockDlg::DoDataExchange(CDataExchange* pDX)
{
CSPCDockDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(ProcessingExceptionDockDlg)
DDX_Control(pDX, IDC_COMBO_TREE_FILTER, m_comboFilter);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(ProcessingExceptionDockDlg, CSPCDockDialog)
//{{AFX_MSG_MAP(ProcessingExceptionDockDlg)
ON_CBN_SELENDOK(IDC_COMBO_TREE_FILTER, OnSelendokComboTreeFilter)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void ProcessingExceptionDockDlg::OnSelendokComboTreeFilter()
{
// ... code redacted ...
}