Отправляет email-рассылки с помощью сервиса Sendsay

Windows API

  Все выпуски  

Windows API


Информационный Канал Subscribe.Ru


Windows API. Уроки с сайта http://progs.biz

Рассылка №2

Windows API. Урок 2. Разбор функции WinMain.

Полные версии уроков (с картинками) можно найти по адресам:
Урок 2. Разбор функции WinMain.

Павловская Т. А. C/C++. Программирование на языке высокого уровня
Павловская Т. А. C/C++. Программирование на языке высокого уровня
Заказать на Озоне

Подробнее

Рассылки сайта progs.biz через subscribe.ru
Уроки по DirectX
Уроки по DirectX. Использование графики (Direct3D, DirectDraw), звука, взаимодействие с пользователем (DirectInput). Применение DirectX в Visual C++, Visual Basic и др., на платформе .NET (языки C#, VB.NET). Каждый урок расчитан на 15-20 минут.

Windows API. Урок 2. Разбор функции WinMain

На прошлом занятии мы с вами создали первую программу для Windows на голом API. На этом занятии мы разберем одну из частей этой программы, а именно функцию WinMain.

WinMain - это главная функция в Windows-приложениях. Именно с нее и начинается выполнение программы. Аналогичной функцией в консольных приложениях является функция main. Разумеется, функция WinMain должна быть ровно одна - не больше и не меньше.

В WinMain передается 4 параметра. Первые два из них имеют тип HINSTANCE. Этот тип - это Windows-тип который означает экземпляр приложения. Первый параметр при этом содержит указатель (в смысле handle) на текущий экземпляр приложения, второй - всегда равен NULL. Ранее (в Windows 3.1) второй параметр содержал handle предыдущего запущенного экземпляра этого же приложения (например, если вы запускали второй экземпляр блокнота). Третий параметр представляет из себя указатель на строку, заканчивающуюся нуль-символом (стандартное представление строк в C/C++). Эта строка - это параметры командной строки, передаваемой в приложение. Параметры командной строки включают и имя программы. И, наконец, третий параметр определяет способ показа главного окна нашего приложения - т. е. показывать ли его разверным на целый экран, или в нормальном виде, или в сложенном и др.

Двигаемся дальше. В самой функции WinMain мы последовательно проходим несколько этапов. Сначала мы создаем класс окна, потом регистрируем его в Windows, после чего создаем на основе этого класса окно и показываем его. На последнем этапе мы запускаем цикл обработки сообщений (так называемый message pump).

Вот эти этапы более подробно.

Создание класса окна начинается с объявления переменной типа WNDCLASS:

...
WNDCLASS w;
 ...

Далее мы заполняем поля этой переменной. Она имеет структурный тип, так что мы должны заполнить все поля. Так как большинство из них можно поставить в ноль, то сначала мы обнуляем из всех:

...
memset(&w, 0, sizeof(WNDCLASS));
 ...

а потом задаем для остальных подходящие значения:

...
    w.style="CS_HREDRAW" | CS_VREDRAW;
    w.lpfnWndProc = WndProc;
    w.hInstance = hInstance;
    w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    w.lpszClassName = "My Class";
 ...

Тут мы последовательно задавали стиль окна, установили, что переменная hInstance нашей структуры должна содержать handle на текущий экземпляр приложения (это первый параметр функции WinMain), установили цвет фона и задали заголовок окна.

Далее мы регистрируем наш класс в системе Windows:

...
RegisterClass(&w);
 ...

После этого мы, наконец-то, создаем окно с помощью функции CreateWindow:

...
hwnd = CreateWindow("My Class", "My title", WS_OVERLAPPEDWINDOW,
        300, 200, 200, 180, NULL, NULL, hInstance, NULL);
 ...

Параметры этой функции задают внешний вид нашего окна. Эту функцию мы рассмотрим более подробно на одном из последующих уроков, пока же укажем только, что она возвращает в качестве значения handle на созданнное окно. Это у нас переменная hwnd типа HWND. Далее все операции с окном мы делаем через этот handle. В частности, мы показываем окно и обновляем его:

    ...
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);
    ...

И, наконец, после того, как окно создано и показано, мы запускаем цикл обработки сообщений:

    ...
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    ...

С функцией WinMain пока все. На следующем занятии мы рассмотрим вторую функцию из нашей минимальной программы - оконную процедуру WndProc.

Наверх

Copyright Алексеев Игорь, 2003
Copyright сайт progs.biz, 2003
Распространение материалов без разрешения владельцев авторских прав запрещено.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное