mfc按钮名称怎么换行_MFC中解决回车键关闭窗口的一般方法

206351219.doc

1

1

在一般情况下编写的对话框程序,

用户在运行的时候,

如果不注意按下了

ENTER

或者

ESC

键,

程序

就会立刻退出,之所以会这样,是因为按下

Enter

键时,

Windows

就会自动去找输入焦点落在了哪一个

按钮上,当获得焦点的按钮的四周将被点线矩形包围。如果所有按钮都没有获得输入焦点,

Windows

会自动去寻找程序或资源所指定的默认按钮

(

默认按钮边框较粗

)

。如果对话框没有默认按钮,那么即使对

话框中没有

OK

按钮,

OnOK

函数也会自动被调用,

对于一个普通的对话框程序来说,

OnOK

函数的调用,

以为着程序会立刻退出。

为了使

Enter

键无效,

最简单的办法就是将

CExDlg

OnOK

函数写成空函数,

然后针对

OK

按钮写一个新的函数来响应。

ESC

键的原理也是如此,它是默认和

OnCancel

函数映射在

一起的。对于

ESC

键,需要自己重载

CDialog

类的

PreTranslateMessage

函数,当发现是

ESC

键的

时候,过滤掉这个消息或者是替换掉这个消息。

以下是简单的代码示例:

【方法

1

可以先重载

OnOK

函数

voidCTestDlg::OnOK()

{

//

里面什么也不写

}

然后重载

PreTranslateMessage

函数,把

ESC

键的消息,用

RETURN

键的消息替换,这样,按

ESC

的时候,也会执行刚才的

OnOK

函数,这样问题就可以解决了。

BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)

{

if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE)

{

pMsg->wParam=VK_RETURN; //

ESC

键的消息替换为回车键的消息,这样按

ESC

的时候

//

也会去调用

OnOK

函数,而

OnOK

什么也不做,这样

ESC

也被屏蔽

}

return CDialog::PreTranslateMessage(pMsg);

}

【方法

2

直接在重载的

PreTranslateMessage

函数中屏蔽回车和

ESC

的消息,和以上方法大同小异:

BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)

{

if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE) return TRUE;

if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN) return TRUE;

else

return CDialog::PreTranslateMessage(pMsg);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值