№ | Макрос | Форма иконки |
IDI_APPLICATION | Стандартная иконка приложения | |
IDI_ASTERISK | Иконка "информация" | |
IDI_EXCLAMATION | Иконка "восклицательный знак" | |
IDI_HAND | Иконка "знак Стоп" | |
IDI_QUESTION | Иконка "вопросительный знак" |
Для того чтобы определить курсор мыши, используется функция API LoadCursor(), имеющая следующий прототип:
HCURSOR LoadCursor(HINSTANCE hlnst, LPCSTR IpszName).
Эта функция возвращает дескриптор курсора. Параметр hInst задает дескриптор экземпляра приложения, содержащего курсор, a lpszName – имя необходимого ресурса. Для того чтобы использовать встроенный тип курсора Windows, следует задать NULL в первом параметре и макрос, определяющий курсор, – во втором. Некоторые наиболее употребляемые макросы для встроенных курсоров приведены ниже.
Таблица 2.2
Наиболее употребляемые макросы для встроенных курсоров
№ | Макрос | Форма курсора |
IDC_ARROW | Стандартный курсор – стрелка | |
IDC_CROSS | Перекрестье | |
IDC_IBEAM | Вертикальная черта, используемая в редакторах | |
IDC_WAIT | "Песочные часы" |
Цвет заполнения окна, создаваемого в нашей программе, определен как белый, а дескриптор кисти получается при вызове функции API GetStockObject(). Кисть – это ресурс, определяющий цвет и способ заполнения объектов на экране. Функция GetStockObject() используется для получения дескрипторов стандартных ресурсов, определенных в системе и представляющих собой кисти, перья (перо применяется для рисования линий так же, как кисть – для заполнения объектов) и шрифты. Вот прототип этой функции:
HGDIOBJ GetStockObject(int object).
Функция возвращает дескриптор объекта, задаваемого аргументом. (Тип HGDIOBJ является дескриптором GDI-объекта.) Следующая таблица представляет несколько типов системных кистей, которые Вы можете использовать.
Таблица 2.3
Типы системных кистей
№ | Макрос | Цвет заполнения |
BLACK_BRUSH | Черный | |
DKGRAY_BRUSH | Темно-серый | |
HOLLOW_BRUSH | Прозрачный | |
LTGRAY_BRUSH | Светло-серый | |
WHITE_BRUS | Белый |
Приведенные в таблице макросы можно использовать в качестве параметра GetStockObject() для получения соответствующей кисти.
Когда класс окна полностью определен, он должен быть зарегистрирован в системе. Для этого используется функция API RegisterClass(), прототип которой имеет следующий вид:
ATOM RegisterClass(CONST WNDCLASS *IpWClass).
Эта функция возвращает значение, идентифицирующее зарегистрированный класс окна. Тип АТОМ определяется при помощи typedef и означает WORD. Каждый класс окна определяется уникальным значением. Параметр lpWClass должен представлять адрес структуры WNDCLASS.
Создание окна
Когда класс окна определен и зарегистрирован, Ваше приложение может создавать окна этого класса, используя функцию API CreateWindow():
HWND CreateWindow(
LPCSTR IpClassName, // Имя класса окна
LPCSTR IpWinName, // Заголовок окна
DWORD dwStyle, // Стиль окна
int x, // Координаты x и y
int y, // левого верхнего угла
int Width, // Ширина окна
int Height, // Высота окна
HWND hParent, // Дескриптор родительского окна
HMENU hMenu, // Дескриптор главного меню
HINSTAHCE hThisInst, // Дескриптор приложения
LPVOID IpszAdditional // Указ. на дополн.информацию
);
Как видно из программы, многие параметры функции CreateWindow() могут принимать значения по умолчанию или равны NULL. Фактически для параметров х, у, Width и Height используется значение – макрос CW_USEDEFAULT, которое позволяет системе самостоятельно выбирать координаты и размеры окна. Если окно не имеет родительского окна, как в случае нашей программы, то параметр hParent должен быть равен HWND_DESKTOP (или NULL, – это тоже допускается). Если окно не должно содержать главного меню, параметр hMenu должен равняться NULL. И в случае, когда не требуется дополнительная информация, как это чаще всего и бывает, параметр lpszAdditional должен быть NULL. (Тип LPVOID определен как void* при помощи typedef. Название LPVOID сложилось исторически и означает "длинный (far) указатель на тип void".)
Значение остальных четырех параметров необходимо установить в программе. Прежде всего, параметр lpszClassName должен представлять указатель на строку, содержащую имя класса окна (то самое, которое мы давали при регистрации класса), а параметр lpszWinName – указатель на строку-заголовок окна. Указатель может быть равен NULL, или эта строка может быть пустой, однако обычно окно имеет какой-нибудь заголовок.
Стиль (или тип) создаваемого окна определяется параметром dwStyle. В нашей программе используется макрос
WS_OVERLAPPEDWINDOW,
который определяет стандартное окно, имеющее системное меню, заголовок, рамку для изменения размеров, а также кнопки минимизации, развертки и закрытия. Используемый стиль окна является наиболее общим. Вы можете создавать окна, имеющие другие стили. Для этого следует прибегнуть к комбинации стилевых макросов, которые Вам нужны. Такая комбинация строится при помощи оператора логического сложения. Некоторые широко используемые стили приведены в таблице 2.4.
Таблица 2.4