|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Using Single-Line Edit Controls
The example in this section demonstrates how to use a window procedure to produce a dialog box that prompts the user to enter a password.
The single-line edit control in the Password dialog box has the ES_PASSWORD style. By default, edit controls with this style display an asterisk for each character the user types. This example, however, uses the EM_SETPASSWORDCHAR message to change the default character from an asterisk to a plus sign (+). This window procedure changes the default push button from Cancel to OK as soon as the user enters text in the edit control. If the user presses the OK button, the window procedure uses the EM_LINELENGTH and EM_GETLINE messages to retrieve the text.
LRESULT CALLBACK PassProc(hDlg, message, wParam, lParam) HWND hDlg; /* window handle of the dialog box */ UINT message; /* type of message */ UINT wParam; /* message-specific information */ LONG 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); }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Использование Редактирования Single-Line Регулируется
Пример в этой секции демонстрирует как, чтобы использовать процедуру окна, чтобы производить диалоговый ящик, который подсказывает потребителя, чтобы вводить пароль.
Линейное управление редактирования в диалоговом ящике Пароля имеет стиль ES_PASSWORD. По умолчанию, элементы управления редактирования с этим стилем отображают звездочку для каждого символа типы потребителя. Этот пример, тем не менее, использует сообщение EM_SETPASSWORDCHAR, чтобы изменять встроенный символ от звездочки до плюса (+). Эта процедура окна изменяет встроенную кнопку от Отмены до OK как только потребитель введет текст на управление редактирования. Если потребитель нажимает кнопку OK, процедура окна использует EM_LINELENGTH и сообщения EM_GETLINE, чтобы извлекать текст.
LRESULT CALLBACK PassProc(hDlg, сообщение, wParam, lParam) HWND hDlg; /* ручка окна диалогового ящика */ сообщение UINT; /* тип сообщения */ UINT wParam; /* сообщеняя-специфическая информация */ ДОЛГО (ДЛИНОЙ) lParam; { СИМВОЛ lpszPassword[16]; СЛОВО cchPassword; ключ (сообщение) { случай WM_INITDIALOG: /* Установите символ пароля в плюс (+) */ SendDlgItemMessage(hDlg,
IDE_PASSWORDEDIT, EM_SETPASSWORDCHAR, (WPARAM) '+', (LPARAM) 0); /* Установите по умолчанию кнопку, чтобы "Отменяться." */ SendMessage(hDlg, DM_SETDEFID, (WPARAM) IDCANCEL, (LPARAM) 0); возвращайтесь ВЕРНО; случай WM_COMMAND: /* * Установите по умолчанию кнопку на "OK" когда пользователь
* текст вводов. */ если(HIWORD (wParam) == EN_CHANGE && LOWORD(wParam) == IDE_PASSWORDEDIT) SendMessage(hDlg, DM_SETDEFID, (WPARAM) IDOK, (LPARAM) 0); ключ(wParam) { случай IDOK: /* Получите номер characters. */ cchPassword = (СЛОВО) SendDlgItemMessage(hDlg,
IDE_PASSWORDEDIT, EM_LINELENGTH, (WPARAM) 0, (LPARAM) 0); если (cchPassword >= 16) { MessageBox(hDlg, "Слишком много символов.", "Ошибка", MB_OK); EndDialog(hDlg, TRUE); обратная ЛОЖЬ; }
еще если (cchPassword == 0) { MessageBox(hDlg, "No символы входили бы.", "Ошибка", MB_OK); EndDialog(hDlg, TRUE); обратная ЛОЖЬ; } /* * Поместите количество символов в первое слово * буфера. */
*((LPWORD)lpszPassword) = cchPassword; /* Получите characters. */ SendDlgItemMessage(hDlg, IDE_PASSWORDEDIT, EM_GETLINE, (WPARAM) 0, /* СТРОКА 0 */ (LPARAM) lpszPassword); /* Недействительный-завершать string. */ lpszPassword[cchPassword] = 0; MessageBox(hDlg,
lpszPassword, "Это прокладывало?", MB_OK); /* Вызовите синтаксический анализ пароля-локальная функция. */ ParsePassword(lpszPassword); EndDialog(hDlg, TRUE); возвращайтесь ВЕРНО; случай IDCANCEL: EndDialog(hDlg, TRUE); возвращайтесь ВЕРНО; } возврат 0;
} обратная ЛОЖЬ; UNREFERENCED_PARAMETER(lParam); }
|
|
|
|
| |