ShowWi ndow(hWnd. OknIcon); UpdateWindow(hWnd);
}
}
Приложение после создания окна выполняет функцией strstrO поиск подстроки Embedded в командной строке. При ее отсутствии вызываются функции ShowWi ndowO, UpdateWindow(hWnd). Первая выводит окно на экран, а вторая передает ему при необходимости сообщение WM_PAINT.
Некоторые полезные функции и структуры данных
Типы данных Windows
При программировании в среде Windows используется множество типов данных, не предусмотренных стандартом используемого языка программирования. Эти типы данных определены в заголовочных файлах при помощи конструкций #def i пе или typedef.
Некоторые из них интуитивно понятны. Например, DWORD, PV0ID, очевидно, определяют двойное слово и указатель. Дескрипторы HANDLE, HWND, HRGN, HMENU введены, чтобы идентифицировать конкретные экземпляры специфичных для Windows объектов, к которым относятся, например, окна и меню. Например, дескриптор окна типа HWND необходимо знать для организации вывода в окно текстовой и графической информации. В системе есть средства, позволяющие приложениям создавать области достаточно сложной формы при помощи комбинации прямоугольных, многоугольных и эллиптических областей. С такой областью работают, используя ее дескриптор HRGN.
В файле Winnt.h можно найти определение макрокоманды DECLARE_HANDLE, которое приведено ниже:
typedef void *PV0ID; то есть это указатель на тип void, fifdef STRICT
typedef void *HANDLE; #define DECLARE_HANDLE(name) struct name##_ {int unused;};\ typedef struct name##_ *name #else
typedef PVOID HANDLE:
#define DECLARE_HANDLE(name) typedef HANDLE name #endif,
В файле windet".h можно найти множество обращений к макрокомандам:
DECLARE_HANDLE (HWND); DECLARE_HANDLE(HMENU); DECLARE_HANDLE(HBITMAP);
Создание простейшего приложения
Эти обращения стоит рассмотреть подробнее.
Если не определена константа STRICT, то, как следует из второй половины приведенного вцше определения DECLARE_HANDLE(name), все типы данных, объявленные при помощи DECLARE_HANDLE(), эквивалентны типу PV0ID. Например, DECLARE_HANDLE (HMENU) препроцессор заменит строкой typedef HANDLE HMENU, то есть определит тип HMENU как HANDLE. Выше было указано, что тип HANDLE эквивалентен PVOID, a PV0ID, в свою очередь, совпадает с void *.