您的位置:首页 > 运维架构

vc中的 drop down 类型的combo控件 如何响应回车事件

2010-06-04 16:26 465 查看
vc中的 drop down 类型的combo控件 如何响应回车事件

找到了两个答案

第一个答案试过,没有问题

转自http://topic.csdn.net/t/20040512/10/3057495.html

如下

BOOL CTestDlgChartDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if( pMsg-> message == WM_KEYDOWN )
{
switch( pMsg-> wParam )
{
case VK_RETURN:
CEdit *pEdit = (CEdit*)m_cb2.GetWindow(GW_CHILD);
if(pMsg-> hwnd == pEdit-> m_hWnd )
{
// GetDlgItem(IDC_EDIT1)-> SendMessage(WM_KILLFOCUS, 0, 0);
// GetDlgItem(IDC_EDIT2)-> SetFocus();
AfxMessageBox("jjj");
}

return TRUE;

}
}

return CDialog::PreTranslateMessage(pMsg);
}

==========*****************

下面为第二个答案没有实际试过。

在Dialog中有一个Combo Box 控件,是drop down类型的,在其中可以输入数据,但是手动输入后,按回车,没有任何反应。

后来在网上查到,回车事件被主窗口截取了。

答案如下: 转自 http://topic.csdn.net/t/20050709/22/4134262.html

子类化组合框的子EDIT窗口,处理键盘消息。
对话框会默认处理回车消息,所以EDIT会收不到。要解决这个问题,你可以重载PreTranslateMessage消息来拦截回车消息。,如果是回车消息,则不交给默认处理函数

========================

lbird谢谢你的回答,我按照你的回答重载了组合框的子EDIT窗口以上的所有窗口的PreTranslateMessage函数,并且在函数中加上了如下代码:
if(pMsg-> message==WM_KEYDOWN && pMsg-> wParam==VK_RETURN)
return TRUE;
但是,按回车后还是没有反应,不知道为什么?
另外,你说的“重载PreTranslateMessage”,是指重载哪一个窗口的PreTranslateMessage?

=====================

搞定了,原来在组合框的子EDIT窗口以上的所有对话框窗口中要重载PreTranslateMessage函数,因为只要是对话框,就会将回车消息截下自己处理,而不会传递给下一窗口。并且RETURN值必须为FALSE,即不翻译消息,直接传递给下一窗口,如果为TRUE,就会翻译消息后退出消息传递。我已经完全理解了,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: