Вам понадобится
  • - компилятор;
  • - Windows Platform SDK.
Инструкция
1
Зарегистрируйте класс окна, которое должно быть создано, если это необходимо. Произведите вызов API-функций RegisterClass, RegisterClassEx или используйте соответствующий функционал применяемого фреймворка.

Функции RegisterClass и RegisterClassEx принимают в качестве единственного параметра указатели на структуры типа WNDCLASS и WNDCLASSEX соответственно. Возвращаемое значение типа ATOM может использоваться вместо имени класса при создании окна. Если вызов функции завершится неудачей, будет возвращено значение 0.

Создайте экземпляр структуры типа WNDCLASS или WNDCLASSEX. Заполните все необходимые поля. В частности, корректные значения должны быть помещены в:

- cbSize - размер структуры в байтах;
- style - набор стилей класса окна;
- lpfnWndProc - указатель на оконную процедуру;
- hInstance дескриптор модуля, в котором производится регистрация класса окна;
- lpszClassName - символическое имя класса.

В остальные поля могут быть записаны значения NULL. Произведите вызов функции для регистрации класса окна. Проверьте возвращенный результат.
2
Выберите существующий класс окна, если это необходимо. Вам должно быть известно символическое имя класса (то, которое передается через указатель lpszClassName при его регистрации) или соответствующее значение типа ATOM. Класс может быть локальным на уровне приложения, глобальным на уровне приложения (регистрация выполнена с флагом CS_GLOBALCLASS) или системным. К последнему типу относятся классы окон с именами: Button, ComboBox, Edit, ListBox, MDIClient, ScrollBar, Static. Такие классы, как RichEdit20W или SysListView32, регистрируются при загрузке соответствующих библиотек.
3
Создайте окно Windows. Воспользуйтесь API-функциями CreateWindow, CreateWindowEx или соответствующими методами-обертками объектов классов используемого фреймворка или библиотеки. Прототип функции CreateWindowEx выглядит следующим образом:


HWND CreateWindowEx(
    DWORD dwExStyle,
    LPCTSTR lpClassName,
    LPCTSTR lpWindowName,
    DWORD dwStyle,
    int x,
    int y,
    int nWidth,
    int nHeight,
    HWND hWndParent,
    HMENU hMenu,
    HINSTANCE hInstance,
    LPVOID lpParam
);

Функция CreateWindow отличается от CreateWindowEx лишь отсутствием параметра dwExStyle.

Осуществите вызов CreateWindow или CreateWindowEx. Передайте в качестве параметра lpClassName имя или значение типа ATOM класса окна, определенное на первом или втором шаге. Параметрами x, y, nWidth, nHeight могут являться координаты и размеры создаваемого окна. Дескриптор окна-родителя (если такое имеется) передается через hWndParent.

Сохраните и проанализируйте значение, возвращенное функциями CreateWindow или CreateWindowEx. При успехе они вернут дескриптор нового окна, при неудаче - NULL.