Посылать окну, естественно, можно только те сообщения, для которых в нем предусмотрена обработка.

Для класса Edit в файле Winuser.h определены следующие константы:

#define EM_GETSEL ОхООВО #define EMJETSEL OxOOBl #define EM_GETLINE 0x00C4 #define EM_LIMITTEXT 0x00C5 #define EMJETPASSWORDCHAR OxOOCC

Наличие константы EM_SETPASSWORDCHAR еще раз подтверждает, что разработчик операционной системы кроме обычного ввода строки с эхо-отображением предусмотрел также решение рассмотренной выше задачи ввода пароля. Можно даже сказать, что наличие стандартного средства позволит решить задачу ввода пароля, написав всего несколько операторов и затратив пятнадцать минут времени. Для проверки этого оптимистичного утверждения нужно перенести файлы проекта ChildWindow в папку Password2 и внести необходимые изменения. Код модуля ReadStr.cpp приведен в листинге 6.14.

Листинг 6.14

#include <windows.h> #include <stdio.h> #include "Main.h" #include "Resource.h" HWND Chld:
static char *Str - NULL: static int sMax; static char *Sym; static int i-0:
void InitStr(HWND hWnd.char *s.int Max.char Sy-'*') {
i f(Chld) DestroyWindow(Chld):

//При создании окна класса edit нужно при помощи флага ES_PASSWORD указать.

//что оно предназначено для ввода пароля.

Chld - CreateWindowExC WS_EX_DLGMODALFRAME."edit".NULL.
WS_BORDERIWS_CHILD|WS_VISIBLE|ES_LEFT|ES_PASSWORD.10.60.100.22.
hWnd. (HMENU)NumC.GetModuleHandle(NULL).NULL): SetFocus(Chld):

//Созданному окну передается символ-заполнитель Sy SendMessage(Chid.EMJETPASSWORDCHAR.(WPARAM)Sy.0); SendMessage(Chld.EM_LIMITTEXT.(WPARAM)Max.O); //длина пароля в символах

Элемент управления Edit

//После ввода Мах символов элемент управления перешлет родительскому окну

//код извещения EN_MAXTEXT.

}

В модуле WndProc.cpp оконную процедуру InputWndProcO можно оставить без изменения, а обработку пароля OnChld() можно реализовать, используя для получения введенного пароля следующую функцию:

UINT GetDlgltemTextC

HWND hDlg. //дескриптор родительского окна,


⇐ Предыдущая| |Следующая ⇒