1. 程式人生 > WINDOWS開發 >windows程式單行文字編輯框的新增

windows程式單行文字編輯框的新增

單行編輯控制元件具有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); 
}