您的位置:首页 > 其它

MFC对话框中处理Enter或Esc按键事件方法

2015-05-07 08:48 477 查看
本文转自:http://blog.csdn.net/leichelle/article/details/7991371

建立好的MFC的对话框,按下Enter或Esc时,系统会调用”默认“事件处理函数,也就是OnOK(),倘若自己的CFormView子类或者CDialog子类没有重写OnOK()函数,则会调用父类的OnOK,其结果是关闭界面。要屏蔽Enter键或Esc退出的功能,只需要将在CDialog中重写ONOK()函数即可。而要实现默认为“确定”功能,下面两种方法供参考:

1.采用ClassWizard进行实现重载OnOK()

OnOK()

{

if(...)

{// 当是Enter或Esc按键事件时

.....

}

else

{ // 点击关闭按钮时

....

CDialog::OnOK();

}

}

2.采用ClassWizard进行实现重载PreTranslateMessage

在类视图里面选择你要实现的类,右键属性,在属性里面找到函数PreTranslateMessage,然后添加PreranslateMessage的消息函数,在PreTranslateMessage的消息函数中添加你要实现处理按键事件的代码。

[cpp] view
plaincopyprint?

/********************************************************

* 方法名称: PreTranslateMessage(MSG *pMsg)

* 描述: 该方法主要是处理传递消息的,任何消息产生的消息都会经过这个方法处理,

* 然后,消息才会到达相应的应用程序中。

* 调用模块:CDialogEx::PreTranslateMessage(pMsg)父类的对应方法

* 输入: MSG类型的消息对象指针

* 输出: 无

* 返回值: bool值

*********************************************************/

BOOL CSerialDlg::PreTranslateMessage(MSG* pMsg)

{

// TODO: Add your specialized code here and/or call the base class

// 把Esc和Enter按键事件消息过滤掉,否则该消息会导致对应应用程序调用OnOK()方法,结束应用程序

if (pMsg->message == WM_KEYDOWN)

{

switch(pMsg->wParam)

{

case VK_ESCAPE: //Esc按键事件

return true;

case VK_RETURN: //Enter按键事件

return true;

default:

;

}

}



return CDialogEx::PreTranslateMessage(pMsg);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: