При описании функции 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")) {


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