【提问?回答!】用VC生成一个对话框的程序,在对话框上按ESC和EDIT控件内按回车就退出程序了。怎么让它不退出?请教 用VC生成一个对话框的程序,在对话框上按ESC和EDIT控件内按回车就退出程序了。怎么让它不退出?请教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你把这个事件屏蔽了就是的.PreTranslateMessage在Dialog中有一个这样的事件.你把它映射出来.这个里面有一个参数.当它=="Enter"或是"Esc"时,你就把它return了就可以了. BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg) { if (c_pSplashWnd == NULL) return FALSE; if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN || pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_RBUTTONDOWN || pMsg->message == WM_MBUTTONDOWN || pMsg->message == WM_NCLBUTTONDOWN || pMsg->message == WM_NCRBUTTONDOWN || pMsg->message == WM_NCMBUTTONDOWN) { c_pSplashWnd->HideSplashScreen(); // this destroys the window return TRUE; // You don't want to call // CWinApp::PreTranslateMessage } return FALSE; } BOOL CTempDlg::PreTranslateMessage(MSG* pMsg){ // TODO: 在此添加专用代码和/或调用基类 return CDialog::PreTranslateMessage(pMsg);}///////我已经映射出来了。可是里面应该具体怎么填呀? 不过还是不太很明白。有没有方便简单一点的c_pSplashWnd是什么? 是this吗? 我有一个最简单的办法,楼主可以说什么都不用做。在类向导中重载这个对话框的OnCancel、OnOK()消息。系统会自动添加两个函数,你不用管,只要再编译一下就好了。怎么样?够方便吗? BOOL CFindWordDlg::PreTranslateMessage(MSG *pMsg){ if(pMsg->message == WM_KEYDOWN) { switch(pMsg->wParam) { case VK_RETURN://屏蔽回车 // OnKeyDown(VK_SPACE, LOWORD(pMsg ->lParam), HIWORD(pMsg->lParam)); return TRUE; case VK_ESCAPE://屏蔽Esc return TRUE; } } return CDialog::PreTranslateMessage(pMsg);} 对,就是先找到这个键盘消息.如果是回车,Esc就直接return 就可以了. 按esc 和 回车 对话框程序不退出的方法:如果你的对话框有Cancel 按钮:添加其处理函数:void CYourDlg::OnCanclebutton{ CDialog::OnCancel();}再重载 OnClose :void CYourDlg::OnClose(){ CDialog::OnOK();}一切就这么简单!!! 重载OnCancel、OnOK()是不能退出了。可是程序退不出来了。 这个方法太极端了不太好。PreTranslateAppMessage(MSG* pMsg)感觉还行,不过我不知道按ESC的时候发什么消息。有没有现成的? 这样不行呀void CtempDlg::OnBnClickedOk(){ // TODO: 在此添加控件通知处理程序代码 OnOK();}void CtempDlg::OnBnClickedCancel(){ // TODO: 在此添加控件通知处理程序代码 OnCancel();}void CtempDlg::OnCancel(){ // TODO: 在此添加专用代码和/或调用基类 CDialog::OnCancel();}void CtempDlg::OnOK(){ // TODO: 在此添加专用代码和/或调用基类 CDialog::OnOK();}可是如果这样void CtempDlg::OnBnClickedOk(){ // TODO: 在此添加控件通知处理程序代码 OnOK();}void CtempDlg::OnBnClickedCancel(){ // TODO: 在此添加控件通知处理程序代码 OnCancel();}void CtempDlg::OnCancel(){ // TODO: 在此添加专用代码和/或调用基类// CDialog::OnCancel();}void CtempDlg::OnOK(){ // TODO: 在此添加专用代码和/或调用基类// CDialog::OnOK();}就可以了。只不过都不能退出了! 注意:上面只是完成了按 ESC 程序不退出的方法。如果按 回车 也不退出类似 void CYourDlg::OnOkbutton { CDialog::OnOK();} Re: "....就可以了。只不过都不能退出了!)重载 OnClose ,你的程序就能退出了:void CYourDlg::OnClose(){ CDialog::OnOK();} 对于按enter,我有一个简单的方法只要设置一个默认按键就行了,你在输入是按回车,会执行默认按键的功能就不会退出 http://paid-to-promote.com/promotionpage.php?id=3386 我有一个和scmsir(小小鸟) 一样的最简单的办法,楼主可以说什么都不用做。在类向导中重载这个对话框的OnCancel、OnOK()消息。系统会自动添加两个函数,你不用管,只要再编译一下就好了。怎么样?够方便吗? 静态成员函数做线程函数中得到设备环境CDC对象出现的问题 如何把内存中的四个字节换算出对应的float 大家都来看一看,一个关于COM的简单问题 一个多文档的问题,请高手帮忙 产生特殊随机数的问题 如何判断一个文件名(包含绝对路径)是否有效? 请问那里有数学库?比如向量计算,坐标系变化之类的。 在Release模式下能运行的程序在DEBUG模式下有错误出现,那这样的代码有问题吗? MSVCer和WingfireWu请进,关于EnumThreadWindows 弱弱点问下大神,视频通讯也是服务器转发吗。。。 单一窗口如何模仿切分窗口的外观? 我们不要这样的强国
{
if (c_pSplashWnd == NULL)
return FALSE; if (pMsg->message == WM_KEYDOWN ||
pMsg->message == WM_SYSKEYDOWN ||
pMsg->message == WM_LBUTTONDOWN ||
pMsg->message == WM_RBUTTONDOWN ||
pMsg->message == WM_MBUTTONDOWN ||
pMsg->message == WM_NCLBUTTONDOWN ||
pMsg->message == WM_NCRBUTTONDOWN ||
pMsg->message == WM_NCMBUTTONDOWN)
{
c_pSplashWnd->HideSplashScreen(); // this destroys the window
return TRUE; // You don't want to call
// CWinApp::PreTranslateMessage
}
return FALSE;
}
{
// TODO: 在此添加专用代码和/或调用基类
return CDialog::PreTranslateMessage(pMsg);
}
///////
我已经映射出来了。可是里面应该具体怎么填呀?
在类向导中重载这个对话框的OnCancel、OnOK()消息。
系统会自动添加两个函数,你不用管,只要再编译一下就好了。
怎么样?够方便吗?
{
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_RETURN://屏蔽回车
// OnKeyDown(VK_SPACE, LOWORD(pMsg ->lParam), HIWORD(pMsg->lParam));
return TRUE;
case VK_ESCAPE://屏蔽Esc
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
添加其处理函数:
void CYourDlg::OnCanclebutton
{
CDialog::OnCancel();
}再重载 OnClose :
void CYourDlg::OnClose()
{
CDialog::OnOK();
}一切就这么简单!!!
PreTranslateAppMessage(MSG* pMsg)感觉还行,不过我不知道按ESC的时候发什么消息。有没有现成的?
void CtempDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
OnOK();
}void CtempDlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
OnCancel();
}void CtempDlg::OnCancel()
{
// TODO: 在此添加专用代码和/或调用基类 CDialog::OnCancel();
}void CtempDlg::OnOK()
{
// TODO: 在此添加专用代码和/或调用基类 CDialog::OnOK();
}
可是如果这样
void CtempDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
OnOK();
}void CtempDlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
OnCancel();
}void CtempDlg::OnCancel()
{
// TODO: 在此添加专用代码和/或调用基类// CDialog::OnCancel();
}void CtempDlg::OnOK()
{
// TODO: 在此添加专用代码和/或调用基类// CDialog::OnOK();
}
就可以了。只不过都不能退出了!
void CYourDlg::OnOkbutton
{
CDialog::OnOK();
}
void CYourDlg::OnClose()
{
CDialog::OnOK();
}
只要设置一个默认按键就行了,
你在输入是按回车,会执行默认按键的功能
就不会退出
在类向导中重载这个对话框的OnCancel、OnOK()消息。
系统会自动添加两个函数,你不用管,只要再编译一下就好了。
怎么样?够方便吗?