刚学vc不久。
mfc dialog编程中,回车键会激活默认按钮的click事件。
我把默认按钮的default button属性去掉了,可是还是会激活该事件。因此要在文本框中输入回车,只能按ctrl+回车,
所以我想捕获用户的回车键,替换成ctrl+回车。网上找过一些资料,已经知道如果捕获键入了:
BOOL CCnTransDlgDlg::PreTranslateMessage(MSG* pMsg)
{
int nVirtKey;
BYTE KeyState[256];
if(pMsg->message==WM_KEYDOWN)
{
nVirtKey=int(pMsg->wParam);
//捕获在文本框中的回车键入。
CWnd* pcwnd=this->GetFocus();
if ((pcwnd->GetDlgCtrlID()==IDC_EDIT_InputStr)&&(nVirtKey==VK_RETURN))
{
if (GetKeyState(VK_CONTROL)==1)
{
MessageBox(_T("要在此文本框中输入回车请按住Ctrl键再输入回车。"),_T("提示信息"));
return TRUE;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
尝试了以下两种方法想把MessageBox语句出转换用户输入: /*GetKeyboardState((PBYTE)KeyState);
KeyState[VK_RCONTROL]=!KeyState[VK_RCONTROL];
SetKeyboardState(KeyState);
CDialog::PreTranslateMessage(pMsg);
KeyState[VK_RCONTROL]=!KeyState[VK_RCONTROL];
SetKeyboardState(KeyState);*/
以及/*keybd_event( VK_CONTROL,0,0,0 );
CDialog::PreTranslateMessage(pMsg);
keybd_event( VK_CONTROL,0,KEYEVENTF_KEYUP,0 ); */ 好像都不见效果。不知哪位高人可不吝指教,谢谢。
mfc dialog编程中,回车键会激活默认按钮的click事件。
我把默认按钮的default button属性去掉了,可是还是会激活该事件。因此要在文本框中输入回车,只能按ctrl+回车,
所以我想捕获用户的回车键,替换成ctrl+回车。网上找过一些资料,已经知道如果捕获键入了:
BOOL CCnTransDlgDlg::PreTranslateMessage(MSG* pMsg)
{
int nVirtKey;
BYTE KeyState[256];
if(pMsg->message==WM_KEYDOWN)
{
nVirtKey=int(pMsg->wParam);
//捕获在文本框中的回车键入。
CWnd* pcwnd=this->GetFocus();
if ((pcwnd->GetDlgCtrlID()==IDC_EDIT_InputStr)&&(nVirtKey==VK_RETURN))
{
if (GetKeyState(VK_CONTROL)==1)
{
MessageBox(_T("要在此文本框中输入回车请按住Ctrl键再输入回车。"),_T("提示信息"));
return TRUE;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
尝试了以下两种方法想把MessageBox语句出转换用户输入: /*GetKeyboardState((PBYTE)KeyState);
KeyState[VK_RCONTROL]=!KeyState[VK_RCONTROL];
SetKeyboardState(KeyState);
CDialog::PreTranslateMessage(pMsg);
KeyState[VK_RCONTROL]=!KeyState[VK_RCONTROL];
SetKeyboardState(KeyState);*/
以及/*keybd_event( VK_CONTROL,0,0,0 );
CDialog::PreTranslateMessage(pMsg);
keybd_event( VK_CONTROL,0,KEYEVENTF_KEYUP,0 ); */ 好像都不见效果。不知哪位高人可不吝指教,谢谢。
解决方案 »
- 关于COOKIE的GMT时间
- 什么时候需要用到多线程?多线程的好处有那些?
- *********在Win32中使用RichEdit问题未解决(续)***********
- void CTextureDlg::OnPaint() ,能解释一下吗
- 如何移出CImageList对象中的元素?
- 如何在dll中导出类?
- 哪位有<<win32多线程程序设计>>这本书的源码? 侯捷翻译的?
- 老话题:vb.net与vc.net的优势互补,劣势互避的问题。
- 如何截获http请求?
- FindResource加载图片资源失败
- 本人急需Visual C++ 1.0 或2.0安装程序
- 求助关于winpcap和packet32的问题
重载CYouDlg::OnOK();
保证在其中不调用CDialog::OnOK();就行了。
屏蔽掉Esc键:
重载CYouDlg::OnCancel();
保证在其中不调用CDialog::OnCancel();就行了。
不用那么麻烦去搞一个Ctrl+Return
要输入回车键的时候,必须敲ctrl+回车才能输入一个回车。
我想敲回车键就输入回车。
谢谢大家。
{
int nVirtKey;
if (pMsg->message==WM_KEYDOWN)
{
CWnd* EditWnd=this->GetFocus();
nVirtKey=int(pMsg->wParam); if (nVirtKey==VK_RETURN)
{
if (EditWnd->GetDlgCtrlID()==IDC_EDIT_InputStr)
{
//if (GetKeyState(VK_CONTROL)==1)//回车
int nStart,nEnd;
m_CEditInput.GetSel(nStart,nEnd);
m_CEditInput.SetSel(nStart,nEnd);
m_CEditInput.ReplaceSel(_T("\r\n"));
//MessageBox(_T("要在此文本框中输入回车请按住 Ctrl 键再输入回车。"),_T("提示信息"));
return TRUE;
}
else
{
//不是在文本框里面的回车,屏蔽掉
return TRUE;
}
}
else if (nVirtKey==VK_ESCAPE)
{
// 屏蔽ESC,按ESC键不退出
return TRUE;
}
else if ((GetKeyState(VK_CONTROL)<0)&&
((nVirtKey=='A')||(nVirtKey=='a'))&&
(EditWnd->GetDlgCtrlID()==IDC_EDIT_InputStr))
{
//在文本框键入Ctrl+A
m_CEditInput.SetSel(0,m_CEditInput.SendMessage(WM_GETTEXTLENGTH));
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
还是希望有人能提供将用户输入的回车转换为CTRL+回车的方法。
我尝试了以下两种方法都不见效: /*GetKeyboardState((PBYTE)KeyState);
KeyState[VK_RCONTROL]=!KeyState[VK_RCONTROL];
SetKeyboardState(KeyState);
CDialog::PreTranslateMessage(pMsg);
KeyState[VK_RCONTROL]=!KeyState[VK_RCONTROL];
SetKeyboardState(KeyState);*/
以及/*keybd_event( VK_CONTROL,0,0,0 );
CDialog::PreTranslateMessage(pMsg);
keybd_event( VK_CONTROL,0,KEYEVENTF_KEYUP,0 ); */