1. 一般情況,當按回車鍵 會觸發default按鍵,而一般來講是 確定 按鈕 ,此時會程序會退出,原因是 確定 按鈕 的Defalut Button屬性 設爲true,過程中調用了基類的OnOK函數:
2. 在新建的Dialog類中,增加 Windows 消息處理INITDIALOG,但是不太一樣的是 要在重寫裏面添加
3. 用來轉移焦點的Edit control控件的屬性 Multiline 設爲True
4.雙擊 資源視圖 dialog的 確定 按鈕 實現一個OnBnClickedOK() 響應函數。相關代碼:
WNDPROC prevProc;//新建一個窗口過程類型
LRESULT CALLBACK WinTstProc(
HWND hwnd, //handle to window
UINT uMsg, //message identifier
WPARAM wParam, //first message parameter
LPARAM lParam //second message parameter
)//窗口過程函數原型
{
if(uMsg == WM_CHAR && wParam == 0x0d)//如果是回車鍵,
{
//把編輯焦點傳到下一個控件
//本函數是全局函數,只能使用平臺SDK來進行
//::SetFocus(::GetNextWindow(hwnd,GW_HWNDNEXT));//方式1,GW_HWNDNEXT Returns a handle to the window below the given window
//::SetFocus(::GetWindow(hwnd,GW_HWNDNEXT));//方式2,使用平臺GetWindow
::GetNextDlgTabItem(::GetParent(hwnd)/*獲取對話框句柄*/,hwnd,FALSE);//需要Edit control 屬性Tapstop 爲True
::SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,FALSE));
}
else
{
//讓先前的窗口去處理
return prevProc(hwnd,uMsg,wParam,lParam);
}
}
BOOL CtestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加額外的初始化
//要改變編輯框的窗口過程,需要在MainFrame OnCreate執行之後,所以要在OnInitDialog 這裏進行
//第一個參數是窗口句柄, 中間是索引值參考MSDN進行設置,最後一個參數是窗口過程函數名。
prevProc = (WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,(LONG)WinTstProc);
return TRUE; // return TRUE unless you set the focus to a control
// 異常: OCX 屬性頁應返回 FALSE
}
MSDN 文件 鏈接:https://pan.baidu.com/s/1UPpu61qQMQGk4kLjYl5WbQ
提取碼:a620