今天和前同事讨论 OnCbnSelchange,
他们的工程中,有一个MFC控件类实现和CodeProject上的 Demo <<Two_Line_Text_Combobox>>基本一样。
可能原型就是借鉴了人家的工程.
他说在那个工程中,找不到OnCbnSelchange类似的实现,需要加一个.
下载编译后,看了效果, 是个ComBox的自绘控件, 点击不同的条目,那个条目就会显示在ComBox中。
这不就是 OnCbnSelchange 的效果么? 找找作者有没有留下该消息或事件的处理函数~
LRESULT CComboboxTextDlg::OnComboboxNotify(WPARAM wParam, LPARAM lParam)
{
TRACE("Combobox CtrlID = %d, CurSelNo = %d\n", wParam, lParam);
return 1;
}
上面就是选择条目时,当前选择条目与上一条目不同时,执行的自定义通知处理。等同于 OnCbnSelchange
lParam就是选择的条目号码, 第一个条目为1, 第二个条目为2, ...
ON_MESSAGE(COMBOBOXEX_NOTIFYMSG, OnComboboxNotify)
由自定义消息COMBOBOXEX_NOTIFYMSG的发送处理,来指示条目的选择发生了变化.
由 SetCurSel 发起 COMBOBOXEX_NOTIFYMSG 消息.
void CComBoxEx::SetCurSel(int nCurSel)
{
if (m_nCurSel != nCurSel) ///< 只有选择的条目不同时,才会发出 COMBOBOXEX_NOTIFYMSG 消息
{
m_nCurSel = nCurSel;
Invalidate();
CWnd *pParentWnd = GetParent();
::SendMessage(pParentWnd->m_hWnd, COMBOBOXEX_NOTIFYMSG, GetDlgCtrlID(), m_nCurSel);
}
}
SetCurSel 的调用 由以下函数发起.
void CComBoxEx::OnLButtonDown
SetComboxCurSel
SetComboxCurSel 由下列任务发起:
CComboxList::OnLButtonUp
CComboxList::OnKeyDown