Share via


単一行編集コントロールを作成する方法

このトピックでは、1 行の編集コントロールを含むダイアログ ボックスを作成する方法について説明します。

1 行の編集コントロールには、ES_PASSWORD スタイルがあります。 既定では、このスタイルの編集コントロールには、ユーザーが入力した各文字のアスタリスクが表示されます。 ただし、この例では、EM_SETPASSWORDCHAR メッセージを使用して、既定の文字をアスタリスクからプラス記号 (+) に変更します。 次のスクリーン ショットは、ユーザーがパスワードを入力した後のダイアログ ボックスを示しています。

screen shot of a dialog box containing an edit control for entering a password

Note

Comctl32.dll バージョン 6 は再頒布可能パッケージではありません。 Comctl32.dll バージョン 6 を使用するには、マニフェストで指定します。 マニフェストの詳細については、「ビジュアル スタイルを有効にする」を参照してください。

 

知っておくべきこと

テクノロジ

前提条件

  • C/C++
  • Windows ユーザー インターフェイス プログラミング

手順

手順 1: パスワード ダイアログ ボックスのインスタンスを作成します。

次の C++ コード例では、DialogBox 関数を使用してモーダル ダイアログ ボックスを作成します。 ダイアログ ボックス テンプレート IDD_PASSWORD はパラメーターとして渡されます。 特に、パスワード ダイアログ ボックスのウィンドウ スタイル、ボタン、および寸法が定義されます。

DialogBox(hInst,                   // application instance
    MAKEINTRESOURCE(IDD_PASSWORD), // dialog box resource
    hWnd,                          // owner window
    PasswordProc                    // dialog box window procedure
    );

手順 2: ダイアログ ボックスを初期化し、ユーザーによる入力を処理します。

次の例のウィンドウ プロシージャは、パスワード ダイアログ ボックスを初期化し、通知メッセージとユーザーによる入力を処理します。

初期化時に、ウィンドウ プロシージャは既定のパスワード文字を + 記号に変更し、既定のプッシュボタンを [キャンセル] に設定します。

ユーザーによる入力の処理中に、ユーザーが編集コントロールにテキストを入力するとすぐに、ウィンドウ プロシージャによって既定のプッシュ ボタンが [キャンセル] から [OK] に変わります。 ユーザーが [OK] ボタンを押すと、ウィンドウ プロシージャは 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); 
}

編集コントロールについて

編集コントロール リファレンス

エディット コントロールの使用

編集コントロール