在 Windows 程式設計中,Tab 鍵是預設的焦點切換鍵,但許多使用者習慣使用 Enter 鍵來在輸入欄位間移動。在 Delphi 或 VB 中實現此功能相對簡單,但在 VC++ 中鮮少見到相關資料。經過反覆嘗試,筆者找到了一種可行的方法,分享給有需要的開發者。
使用 AppWizard 建立一個基於對話框的 VC++ 專案。切換到 Resource View,在對話框中插入一個編輯框,並修改其 Styles 屬性,勾選 Multiline 和 Want Return 兩項。
在 ClassWizard 中選擇 Add Class,新增一個名為 CMyEdit 的類別,基類選擇 CEdit,其餘採用預設選項。
在新生成的 CMyEdit 類別中加入 WM_KEYDOWN 的訊息映射函數,並加入以下程式碼:
void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if (nChar == VK_RETURN) // 檢測 Enter 鍵
{
CDialog* pWnd = (CDialog*)GetParent(); // 取得對話框指標
pWnd->NextDlgCtrl(); // 切換到下一個輸入焦點
}
CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}
在 ClassWizard 中選擇 Member Variables 選項,Class name 選擇對話框類別,Control IDs 中選擇編輯框的 ID,點選 Add Variable。在對話框中 Category 選擇 Control,Variable type 選擇剛才定義的 CMyEdit 類別。
編譯執行程式,將游標定位到編輯框中按下 Enter 鍵,即可觀察到焦點自動切換到下一個控制項的效果。