为了使EDIT控件能收到回车键 属性mutiline要改为TRUE
方法1 ======================================================================
WNDPROC prevProc;
LRESULT CALLBACK NewEditProc
(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
if(uMsg==WM_CHAR && wParam==0x0d)
//截获回车键
{
//输入焦点传入下一个编辑框
::SetFocus(::GetNextWindow(hwnd,GW_HWNDNEXT));
//GetNextWindow返回下一个窗口的句柄
//或者 ::SetFocus(::GetWindow(hwnd,GW_HWNDNEXT));
//或者 ::SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,FALSE));
//控件要保留WS_TABSTOP属性
return 1;
}
else
{
//调用先前的窗口过程来处理该消息
return prevProc(hwnd,uMsg,wParam,lParam);
}
}
BOOL CMy0618ADlg::OnInitDialog()
{::prevProc=(WNDPROC)::SetWindowLongA(this->GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,(LONG)::NewEditProc);
//核心函数 SetWindowLong 为窗口设置一个新的窗口过程函数,返回先前的窗口过程函数地址
}
方法2 =====================================================================================
利用TAB STOP
控件要用Tab stop属性 (默认就有)WS_TABSTOP
void CMy0618ADlg::OnBnClickedOk()
{
this->GetNextDlgTabItem(this->m_wnd,FALSE)->SetFocus(); //FALSE下一个
//CDialogEx::OnOK();
}
BOOL CMy0618ADlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN)
{
if(pMsg->wParam==13 )
{
CWnd* p;
p=this->GetFocus();
//回车按下后 焦点仍在EDIT框时 这里会运行一次
//焦点被自动转到OK按键后,这里会再运行一次 所以要把IDOK给滤掉
if(this->GetDlgItem(IDOK)!=p)
{
this->m_wnd=p;
}
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}