需求:用戶點擊按鈕並釋放鼠標左鍵後,焦點自動移至編輯框 IDC_EDIT1 並顯示閃爍光標。
BOOL CMyDialog::PreTranslateMessage(MSG* pMsg) {
if (pMsg->message == WM_LBUTTONUP) {
// 獲取鼠標釋放時光標下的控件 ID
CWnd* pWnd = ChildWindowFromPoint(pMsg->pt);
if (pWnd) {
int nID = pWnd->GetDlgCtrlID();
if (nID == IDC_BUTTON1) { // 目標按鈕 ID
// 設置焦點到編輯框
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
if (pEdit) {
pEdit->SetFocus();
return TRUE; // 消息已處理
}
}
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
pMsg->pt 找到子控件 (需轉客戶區坐標或用 ScreenToClient)。void CMyDialog::OnBnClickedButton1() {
// 按鈕點擊響應 (按下並釋放在客戶區內觸發)
GetDlgItem(IDC_EDIT1)->SetFocus();
}
BN_CLICKED 本身即代表完整點擊動作 (按下+釋放在控件內)。PreTranslateMessage + WM_LBUTTONUP。推薦使用 ON_BN_CLICKED 處理器 + SetFocus(),代碼最少、語義最清晰。