消息截取-回车按键 针对不同控件做不同处理

     在程序运行时,在界面点击回车,会有默认的按钮响应。但是当界面有多个按钮,处理不同的事务时,点击回车,需要根据当前鼠标所在控件响应不同的按钮处理,要满足这样的需求就需要消息截取,针对不同的控件调用不同的处理函数。

 

一般,我们采用重载虚函数PreTranslateMessage来打到截取消息的目的。

 

如果是回车,判断VK_RETURN虚拟按键。

 

// 取得当前焦点所在控件

CWnd* pWnd = GetFocus();  

 

// 取得控件ID,可以根据ID进行判断

int dID = pWnd->GetDlgCtrlID();

 

// 取得控件名称,根据控件名称进行判断

GetClassName(pWnd->GetSafeHwnd(), szClassName, 40);

 

比较函数:lstrcmpi

if ( lstrcmpi(_T("EDIT"), szClassName) == 0 )

{

        .......;

}

 

 

代码如下:

 

 

BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)

{

// TODO: Add your specialized code here and/or call the base class

if ( pMsg->message == WM_KEYDOWN )

{

if ( pMsg->wParam == VK_RETURN)

{

if ( pMsg->wParam == VK_RETURN )

{

TCHAR szClassName[40] = { 0 };

CWnd* pWnd = GetFocus();  // 取得当前焦点所在控件

if ( pWnd )

{

int dID = pWnd->GetDlgCtrlID();   // 取得控件ID,可以根据ID进行判断

if (dID == IDC_EDIT1)

{

OnBnClickedButton1();

}

else if (dID == IDC_EDIT2)

{

OnBnClickedButton2();

}

 

// 取得控件名称,根据控件名称进行判断

                     GetClassName(pWnd->GetSafeHwnd(), szClassName, 40);

                    if ( lstrcmpi(_T("EDIT"), szClassName) == 0 )

                     {

                         return FALSE;

                     }

}

}

return TRUE;

}

}

return CDialog::PreTranslateMessage(pMsg);

}

你可能感兴趣的:(消息截取-回车按键 针对不同控件做不同处理)