本文主要是介绍MFC对话框程序屏蔽回车与ESC键,Tab键,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里仅介绍重载对话框的消息预处理函数PreTranslateMessage(MSG* pMsg)来进行消息屏蔽。
MFC下基于对话框的程序,默认的会有一个“确定”按钮,还有一个“取消”按钮,那个“确定”按钮是默认按钮。这时候运行程序,按下回车键或者ESC键,程序都会退出。
《Inside Visual C++》一书中:“当用户按下Enter键时,Windows就会自动去查找“输入焦点”落在了哪一个按钮上,获得焦点的按钮的四周将被点线矩形框所包围。如果所有按钮都没有获得输入焦点,Windows就会自动去寻找程序或资源所指定的默认按钮。如果对话框没有默认按钮,那么即使对话框中没有“确定”按钮,OnOK函数也会自动被调用”。有的时候肯定是不想在按下回车键之后退出对话框程序,ESC也是一样。解决方法也很简单,重载对话框的PreTranslateMessage函数,然后在该函数中干掉ESC和回车这两个按键的消息。
方法一:
在XXXDlg.h文件中的CXXXDlg类中添加:
protected: virtual BOOL PreTranslateMessage(MSG* pMsg);
在XXXDlg.cpp文件中添加实现:
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{if (pMsg->message == WM_KEYDOWN){switch (pMsg->wParam){case VK_RETURN: //屏蔽回车键return TRUE;case VK_ESCAPE: //屏蔽ESC键return TRUE;case VK_TAB:{int nStart, nEnd; HWND hWnd = ::SetFocus(m_ctrlEditContent.m_hWnd);// m_ctrlEditContent为编辑框名称 if(hWnd != m_ctrlEditContent.m_hWnd){::SetFocus(hWnd); }else //处理编辑框中的Tab键,使得可以在其中输入制表符'\t'{ m_ctrlEditContent.GetSel(nStart,nEnd); m_ctrlEditContent.SetSel(nStart,nEnd); m_ctrlEditContent.ReplaceSel("\t");return TRUE;} } default:break;}}return CDialog::PreTranslateMessage(pMsg);
}
编辑框接受TAB为’\t’,而不是在各个空间之间转移。这就是上面case VK_TAB的作用。或许有的程序用不到这个功能,个人觉得写在这里可以加深消息预处理的理解。同时可以参考更改回车键的响应。参见:http://www.vckbase.com/index.php/wv/31.html
方法二:
另一个屏蔽回车键的方法,解释见注释。
在XXXDlg.h文件中的CXXXDlg类中添加:
// 生成的消息映射函数
...
virtual BOOL PreTranslateMessage(MSG* pMsg);//这里是上面所添加的消息预处理函数
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg LRESULT OnGetDefID(WPARAM wp, LPARAM lp);//添加消息响应函数
DECLARE_MESSAGE_MAP()
在XXXDlg.cpp文件中添加实现:
BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)... ON_MESSAGE(DM_GETDEFID, OnGetDefID)
END_MESSAGE_MAP()//屏蔽按enter键就退出的情况
//当用户按下回车键时,Windows发送一个特殊的WM_GETDEFID消息来获得缺省的命令ID,
//Windows再将它作为WM_COMMAND发送。所以,要重载WM_GETDEFID消息,
//在有关Windows的文档中是这样描述WM_GETDEFID返回值的:
//“如果有缺省得按钮,则返回值的高位字包含DC_HASDEFID,低位字包含控制的标识符。否则,返回值是零。”
LRESULT CXXXDlg::OnGetDefID(WPARAM wp, LPARAM lp)
{ return MAKELONG(0,DC_HASDEFID);
}
参考来源 详见
这篇关于MFC对话框程序屏蔽回车与ESC键,Tab键的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!