用IE浏览网页时回车就可提交信息,如:google搜索时填入搜索内容按回车键就可以提交
但在VC对话框里用webbrowser控件浏览网页时,按回车键就直接退出对话框程序了,
原因是对话框先截获回车消息,然后调用OnOK(),所以就退出了。
解决方法是重载PreTranslateMessage(MSG* pMsg)函数:
- BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
- {
- if((pMsg->message == WM_KEYDOWN)&&(pMsg->wParam == VK_RETURN))
- {
- return false;
- }
- return CDialog::PreTranslateMessage(pMsg);
- }
前段时间又碰到个类似的问题,回车是不关闭对话框了,还能提交表单,但有些网页在输入完回车后响应的是tab键,如:
登录界面,输入用户名后回车,光标会跳至密码输入框!用这种方法就比较麻烦了,这时还是重载WM_GETDEFID消息比较好!
注意:!!!!!重载了WM_GETDEFID消息就不要重载PreTranslateMessage了!!!!!
下面是重载WM_GETDEFID消息的方法
一、添加消息映射
- BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
- ON_MESSAGE(DM_GETDEFID, &CMyDlg::OnGetDefID)
- END_MESSAGE_MAP()
二、添加OnGetDefID函数定义
- LRESULT CMyDlg::OnGetDefID(WPARAM wParam, LPARAM lParam)
- {
- return MAKELONG(0, DC_HASDEFID);
- }
重载WM_GETDEFID消息是从如下blog处看到的,http://blog.csdn.net/citysheep/archive/2010/11/04/5987969.aspx
还附上另外一篇讲处理回车转tab的处理方法http://www.wangchao.net.cn/bbsdetail_47936.html