При описании функции CreateWi ndow( ) ничего не было сказано о последнем параметре LPV0ID1 pData. Он служит для передачи дополнительной информации оконной процедуре. Функция CreateWi ndow( ) до своего завершения дважды вызывает оконную процедуру и передает ей сообщения WM_NCCREATE, WM_CREATE.
При получении каждого из этих сообщений параметр оконной процедуры 1 Pa ram содержит адрес структуры CREATESTRUCT, поля которой заполнены параметрами вызова CreateWi ndowEx( ). В частности, значение параметра LPV0ID1 pData можно прочитать в поле lpCreateParams структуры CREATESTRUCT.
В листинге 1.5 показывается процесс передачи в оконную процедуру адреса переменной Y в виде последнего параметра функции CreateWindow( ).
Листинг 1.5
int Y - 27;
HWND hWnd - CreateWindow(Name."minim".
WSJISIBLE I WS_OVERLAPPEDWINDOW.200. 200.300.200.NULL.NULL.KodPri1.&Y);
Оконная процедура может получить значение этой переменной (число 27), переопределив параметр IParam в указатель на структуру CREATESTRUCT, как показано в листинге 1.6.
Листинг 1.6
case WM_NCCREATE: {
int Temp - *(int *)((CREATESTRUCT *)lParam)->lpCreateParams; //В переменную Temp запишется число 27
}
break;
Флага WS_VISIBLE достаточно для того, чтобы созданное окно было показано на экране. При его отсутствии окно после создания невидимо. Далее, во время работы программы, может быть принято решение о вызове функций отображения и обновления окна. Так, оконное приложение может запускаться без показа окна как «библиотечная функция», выполняющая некоторые вычисления, но не взаимодействующая с пользователем. Признак подавления вывода окна передается приложению в командной строке каким-нибудь словом, например Embedded, как это проиллюстрировано в листинге 1.7.
Некоторые полезные функции и структуры данных
Листинг 1.7
int APIENTRY WinMain (HINSTANCE KodPril.HINSTANCE.LPSTR cmd.int Oknlcon) {
HWND hWnd - CreateWindow(Name."minim".
WSJMRLAPPEDWINDOW. //создается невидимое окно 200. 200.300.200,NULL.NULL.KodPri1,0); ifdstrstr (cmd."Embedded")) {