工具栏ToolBar上的CComboBox响应回车

王朝other·作者佚名  2006-05-16
窄屏简体版  字體: |||超大  

在派生CToolBar类的时候, 注意如果用VC6的类向导, 类列表里是没有CToolBar的, 可以选择CToolBarCtrl, 然后手动改为CToolBar( 参考 http://support.microsoft.com/kb/99161/en-us),

//下面的代码是直接手写的

#define IDC_COMBOBOX 11111

class CToolBarEx : public CToolBar

{

.........//其他的类代码省略

CComboBox m_Combo;

afx_msg void OnSelectComboBox();

DECLARE_MESSAGE_MAP()

};

BEGIN_MESSAGE_MAP(CToolBarEx, CToolBar)

ON_CBN_SELENDOK(ID_COMBOBOX, OnSelectComboBox)

END_MESSAGE_MAP()

void CToolBarEx::OnSelectComboBox()

{

}

在上面的一小段代码中, 我们添加了对CBN_SELENDOK消息的处理, 这个消息是CComboBox在完成选择后

发送给父窗口的. 处理回车还需要在用户的VK_RETURN消息里模拟发送出这个CBN_SELENDOK消息.

所以我们还需要处理PreTranslateMessage函数.函数在类头文件的声明略.

BOOL CToolBarEx::PreTranslateMessage(MSG* pMsg)

{

if (pMsg->message == WM_KEYDOWN)

{

NMHDR nm;

nm.hwndFrom = m_hWnd;

nm.idFrom = GetDlgCtrlID();

nm.code = NM_RETURN;

switch (pMsg->wParam)

{

case VK_RETURN:

//发送通知消息

if( m_Combo.IsChild(GetFocus()) )

OnSelectComboBox();

GetOwner()->SendMessage(WM_NOTIFY, nm.idFrom, (LPARAM)&nm);

return TRUE;

}

}

return CToolBar::PreTranslateMessage(pMsg);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航