Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

2.2.8 Венгерская нотация

Как вы могли заметить, некоторые переменные в HELLOWIN.CPP имеют своеобразные имена. Например, имя szCmdLine — параметр WinMain.

Многие программисты для Windows используют соглашения по именованию переменных, названные условно Венгерской нотацией, в честь легендарного программиста Microsoft Чарльза Симони. Все очень просто: имя переменной начинается со строчных буквы или букв, которые отмечают тип данных переменной. Например, префикс sz в szCmdLine означает, что строка завершается нулем (string terminated by zero). Префикс h в hInstance и hPrevInstance означает описатель (handle); префикс i в iCmdShow означает целое (integer). В двух последних параметрах WndProc также используется венгерская нотация, хотя, как уже говорилось раньше, wParam правильнее следовало бы назвать uiParam (беззнаковое целое — unsigned integer). Но поскольку эти два параметра определяются через типы данных WPARAM и LPARAM, было решено сохранить их прежние имена.

При обозначении переменных структуры удобно пользоваться именем самой структуры (или аббревиатурой имени структуры) и строчными буквами, используя их либо в качестве префикса имени переменной, либо как имя переменной в целом. Например, в функции WinMain в HELLOWIN.CPP переменная msg относится к структуре типа MSG; wndclass — к структуре типа WNDCLASSEX. В функции WndProc, переменная ps относится к структуре PAINTSTRUCT, rect — к RECT.

Венгерская нотация помогает избегать ошибок в программе еще до ее компоновки. Поскольку имя переменной описывает и саму переменную, и тип ее данных, то намного снижается вероятность введения в программу ошибок, связанных с несовпадением типа данных у переменных.

В следующей таблице представлены префиксы переменных, которые в основном будут использоваться в этой книге:

2.2.9 Точка входа программы

На этом глобальный обзор HELLOWIN.CPP заканчивается, и можно начать строку за строкой разбирать программу.

Текст программы начинается с инструкции #include, которая позволяет включить в программу заголовочный файл stdafx.h:

#include ”stdafx.h”

Этот файл, в свою очередь, включает в себя инструкцию:

#include <windows.h>

Заголовочный файл WINDOWS.H включает много других заголовочных файлов, содержащих объявления функций Windows, структур Windows, новые типы данных и числовые константы.

Ниже следует объявление WndProc:

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

Это объявление в начале программы необходимо потому, что в тексте функции WinMain имеются ссылки на функцию WndProc.

В программе на языке С, написанной для традиционной среды, точкой входа является функция main. С этого места программа начинает выполняться. (Фактически функция main является точкой входа в ту часть программы, которая пишется программистом. Обычно компилятор С должен вставить некоторый стартовый код в исполняемый файл. Этот код и вызывает функцию main.) Точкой входа программы для Windows является функция WinMain. WinMain всегда определяется следующим образом:

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

Эта функция использует последовательность обработки параметров APIENTRY, т.е. WINAPI, т.е. stdcall и, по своему завершению, возвращает операционной системе Windows целое. Функция называется WinMain. В ней есть четыре параметра.

Параметр hInstance называется описателем экземпляра (instance handle). Это уникальное число, идентифицирующее программу, когда она работает под Windows. Может так случиться, что пользователь запустит под Windows несколько копий одной и той же программы. Каждая копия называется "экземпляром" и у каждой свое значение hInstance. Описатель экземпляра можно сравнить с "идентификатором задачи" или "идентификатором процесса" — обычными терминами многозадачных операционных систем.

Параметр hPrevInstance — предыдущий экземпляр (previous instance) — в настоящее время устарел. В ранних версиях Windows он относился к самому последнему, предшествующему данному, описателю экземпляра той программы, которая все еще активна. Если в данный момент времени не было загружено никаких копий программы, то hPrevInstance = 0 или NULL. Для Win 32 этот параметр всегда равен NULL.

Параметр szCmdLine — это указатель на оканчивающуюся нулем строку, в которой содержатся любые параметры, переданные в программу из командной строки. Вы можете запустить программу для Windows с параметром командной строки, вставив этот параметр после имени программы в командной строке MS-DOS или указать имя программы и параметр в окне диалога Run, которое вызывается из меню Start.

Параметр iCmdShow — число, показывающее, каким должно быть выведено на экран окно в начальный момент.

Это число задается при запуске программы другой программой. Программисты достаточно редко обращаются к этому числу, но при необходимости такая возможность существует. В большинстве случаев число равно 1 или 7.

Но лучше не думать об этом значении как о единице или как о семерке. Лучше думайте о них как об идентификаторе SW_SHOWNORMAL (заданном в заголовочных файлах Windows равным 1) или идентификаторе SW_SHOWMINNOACTIVE (заданном равным 7). Префикс SW в этих идентификаторах означает "показать окно" (show window). Параметр показывает, необходимо ли запущенную пользователем программу выводить на экран в виде окна нормального размера или окно должно быть изначально свернутым.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]