單行編輯控制項具有ES_密碼樣式。預設情況下,具有此樣式的編輯控制項為用戶鍵入的每個字元顯示一個星號。 但是,本例使用EM_SETPASSWORDCHAR消息將預設字元從星號更改為加號(+)。以下屏幕截圖顯示用戶輸入密碼後的對話框。 步驟1:創建密碼對話框的實例。 下麵的C++代碼示例使用DealBox ...
單行編輯控制項具有ES_密碼樣式。預設情況下,具有此樣式的編輯控制項為用戶鍵入的每個字元顯示一個星號。
但是,本例使用EM_SETPASSWORDCHAR消息將預設字元從星號更改為加號(+)。以下屏幕截圖顯示用戶輸入密碼後的對話框。
步驟1:創建密碼對話框的實例。
下麵的C++代碼示例使用DealBox函數創建一個模態對話框。對話框模板IDD_PASSWORD作為參數傳遞。它定義了“密碼”對話框的視窗樣式、按鈕和尺寸。
DialogBox(hInst, // application instance MAKEINTRESOURCE(IDD_PASSWORD), // dialog box resource hWnd, // owner window PasswordProc // dialog box window procedure );
步驟2:初始化對話框並處理用戶輸入。
以下示例中的視窗過程初始化“密碼”對話框並處理通知消息和用戶輸入。初始化期間,視窗過程將預設密碼字元更改為+號,並將預設按鈕設置為取消。
在用戶輸入處理期間,只要用戶在編輯控制項中輸入文本,視窗過程就會將預設按鈕從“取消”更改為“確定”。
如果用戶按下“確定”按鈕,視窗過程將使用EM_LINELENGTH_和EM_GETLINE消息來檢索文本。
INT_PTR CALLBACK PasswordProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { TCHAR lpszPassword[16]; WORD cchPassword; switch (message) { case WM_INITDIALOG: // Set password character to a plus sign (+) SendDlgItemMessage(hDlg, IDE_PASSWORDEDIT, EM_SETPASSWORDCHAR, (WPARAM) '+', (LPARAM) 0); // Set the default push button to "Cancel." SendMessage(hDlg, DM_SETDEFID, (WPARAM) IDCANCEL, (LPARAM) 0); return TRUE; case WM_COMMAND: // Set the default push button to "OK" when the user enters text. if(HIWORD (wParam) == EN_CHANGE && LOWORD(wParam) == IDE_PASSWORDEDIT) { SendMessage(hDlg, DM_SETDEFID, (WPARAM) IDOK, (LPARAM) 0); } switch(wParam) { case IDOK: // Get number of characters. cchPassword = (WORD) SendDlgItemMessage(hDlg, IDE_PASSWORDEDIT, EM_LINELENGTH, (WPARAM) 0, (LPARAM) 0); if (cchPassword >= 16) { MessageBox(hDlg, L"Too many characters.", L"Error", MB_OK); EndDialog(hDlg, TRUE); return FALSE; } else if (cchPassword == 0) { MessageBox(hDlg, L"No characters entered.", L"Error", MB_OK); EndDialog(hDlg, TRUE); return FALSE; } // Put the number of characters into first word of buffer. *((LPWORD)lpszPassword) = cchPassword; // Get the characters. SendDlgItemMessage(hDlg, IDE_PASSWORDEDIT, EM_GETLINE, (WPARAM) 0, // line 0 (LPARAM) lpszPassword); // Null-terminate the string. lpszPassword[cchPassword] = 0; MessageBox(hDlg, lpszPassword, L"Did it work?", MB_OK); // Call a local password-parsing function. ParsePassword(lpszPassword); EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, TRUE); return TRUE; } return 0; } return FALSE; UNREFERENCED_PARAMETER(lParam); }