windows程式單行文字編輯框的新增
阿新 • • 發佈:2020-06-13
單行編輯控制元件具有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,(WPARAM) IDOK,(LPARAM) 0); } switch(wParam) { case IDOK: // Get number of characters. cchPassword = (WORD) SendDlgItemMessage(hDlg,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.",TRUE); return FALSE; } // Put the number of characters into first word of buffer. *((LPWORD)lpszPassword) = cchPassword; // Get the characters. SendDlgItemMessage(hDlg,EM_GETLINE,// 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); }