การใช้ตัวควบคุมการแก้ไขแบบบรรทัดเดียว

ตัวอย่างในส่วนนี้สาธิตวิธีการใช้หน้าต่างกระบวนการผลิตกล่องโต้ตอบที่พร้อมท์ให้ผู้ใช้ป้อนรหัสผ่าน.

ตัวควบคุมการแก้ไขแบบบรรทัดเดียวในกล่องโต้ตอบรหัสผ่านมีลักษณะ ES_PASSWORD โดยค่าเริ่มต้น แก้ไขตัวควบคุม ด้วยการแสดงผลลักษณะนี้ดอกสำหรับแต่ละอักขระชนิดผู้ใช้ ตัวอย่างนี้ อย่างไรก็ตาม ใช้ข้อความEM_SETPASSWORDCHARให้เปลี่ยนเป็นอักขระเริ่มต้นจากเครื่องหมายดอกจันเป็นเครื่องหมายบวก (+).

ขั้นตอนนี้หน้าต่างเปลี่ยนปุ่มกดเริ่มต้นจากยกเลิกตกลงทันทีที่ผู้ใช้ป้อนข้อความในตัวควบคุมการแก้ไข ถ้าผู้ใช้กดปุ่ม OK หน้าต่างกระบวนงานใช้ข้อความEM_LINELENGTHและEM_GETLINEในการเรียกข้อความ.

LRESULT CALLBACK PassProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    CHAR 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, 
                            "Too many characters.", 
                            "Error", 
                            MB_OK); 
                        EndDialog(hDlg, TRUE); 
                        return FALSE; 
                    } 
                    else if (cchPassword == 0) 
                    { 
                        MessageBox(hDlg, 
                            "No characters entered.", 
                            "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, 
                        "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); 
} 
 

Index