Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО / Лекции / КурсЛекций.doc
Скачиваний:
93
Добавлен:
23.02.2015
Размер:
8.22 Mб
Скачать

Создание главного окна

Каждое приложение Win32 должно иметь функцию WinMain(), которая является точкой входа.WinMain()выполняет ряд задач, в том числе регистрацию класса окна для главного окна и создание главного окна.WinMain()регистрирует класс главного окна, вызывая функциюRegisterClass(), и создает главное окно с помощью функцииCreateWindowEx().

Функция WinMain()может также запретить Вашему приложению создавать более одной копии приложения. Для этого создайте именованный мьютекс с помощью функцииCreateMutex(). Если функцияGetLastError()возвращает ERROR_ALREADY_EXISTS, это означает, что одна копия Вашего приложения уже существует (она создала мьютекс) и Вы должны выйти из функцииWinMain().

Windows не отображает автоматически главное окно после его создания; приложение должно использовать функцию ShowWindow(), чтобы отобразить главное окно. После создания главного окна функцияWinMain()вызывает функциюShowWindow(), передавая ей два параметра: дескриптор главного окна и флаг, определяющий, должно ли главное окно быть свернуто или развернуто в момент отображения. Обычно флаг может быть установлен в любую из констант, начинающихся с префикса SW_. Однако, когдаShowWindow()вызывается, чтобы отобразить главное окно приложения, флаг должен быть установлен в SW_SHOWDEFAULT. Этот флаг сообщает Windows, что нужно отобразить окно так, как указано программой, которая запустила приложение.

Если окно создается как окно Unicode, оно получает только сообщения Unicode. Вы можете определить, является ли данное окно окном Unicode, вызвав функцию IsWindowUnicode().

Сообщения, посылаемые при создании окна

При создании любого окна Windows посылает сообщения функции этого окна. Windows посылает сообщение WM_NCCREATE после создания неклиентской области окна и сообщение WM_CREATE после создания клиентской области. Функция окна получает оба сообщения до того, как Windows отобразит окно. Оба сообщения содержат указатель на структуру CREATESTRUCT, которая содержит всю информацию, определенную в функции CreateWindowEx(). Как правило, функция окна выполняет нужную инициализацию после получения этих сообщений.

При создании дочернего окна Windows посылает сообщение WM_PARENTNOTIFY родительскому окну после отправки сообщений WM_NCCREATE и WM_CREATE. Windows также посылает другие сообщения при создании окна. Количество и порядок этих сообщений зависят от класса и стиля окна, а также от функции, используемой для создания окна.

Многопоточные приложения

Приложение Win32 может иметь множество потоков выполнения, и каждый поток может создавать окна. Поток, который создает окно, должен содержать код функции этого окна

Приложение может использовать функцию EnumThreadWindows(), чтобы перечислить все окна, созданные определенным потоком. Эта функция передает дескриптор каждого окна данного потока определенной приложением функции обратного вызоваEnumThreadWndProc().

Функция GetWindowThreadProcessId()возвращает идентификатор потока, который создал определенное окно.

Если окно создано другим потоком, Вы можете изменить параметр, который определяет, будет ли это окно показано в свернутом или развернутом виде, используя функцию ShowWindowAsync().