GameDev :: OpenGL @ Урок 8

Урок 9. Погружаемся В WinAPI:

До сегодняшнего урока мы делали инициализацию с помощью библиотеки GLUT. Но, пора забыть о glut. Почему? Причин на это есть несколько:

  • Библиотеку glut всегда приходится с собой таскать (так как у людей ее нету). Да и вам приходится качать эту библиотеку из Сети. А зачем это делать, если можно обойтись и без нее?
  • Если вы будете писать серьезный проект, то нужно использовать WinAPI, а не glut. Так как библиотека GLUT- это для несерьезных проектов (типа тех, что мы делали до этого урока). Кстати, если вы собираетесь работать в игровой индустрии (скажем, game develop'ером), тогда о glut и речи быть не может. Нужно знать только WinAPI.
  • В любом случае вы должны знать WinAPI. А так убьем двух зайцев сразу. То есть, будем учить и OpenGL и WinAPI.
Может, есть еще куча разных мелких причин, но этих нам пока достаточно. Итак, что же такое WinAPI? Это, говоря простым и понятным языком, набор разных функций для создания программ под Windows. Зная WinAPI, вы можете писать почти одинаковые программы на разных языках, то есть эти функции не изменяются в зависимости от конкретного языка.

Давайте, что б очень много не говорить, напишем самое простое приложение (окно с сообщением). Для этого откроем Visual C++, и выберем File -> New. Теперь в окне выберите Win32 Application, назовите ваш проект, и нажмите Ok. Мы создали проект. К нашему проекту нужно добавить *.cpp файл (File->New->C++ Source File). Вот теперь уже у нас есть место, где и напишем свою программу. Ниже представлен код программы:

#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                           LPSTR lpCmdLine, int nShowCmd)
{
   MessageBox(0,"It is worked!","WinAPI Test",MB_OK | MB_ICONINFORMATION);
   return 0;
}

Итак, ничего сложного здесь нет. Сейчас вы и сами это поймете :). Разберем каждую строчку:

#include Подключаем файл для работы с WinAPI функциями.
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) Эта функция должна присутствовать во всех приложениях, которые мы будет писать дальше (это что-то вроде функции int main(); которую мы использовали до этого). Мне кажется, что не плохо было бы разобраться со всеми параметрами данной функции.
HINSTANCE hInstance- указатель на экземпляр нашего приложения (или, текущий дескриптор окна).
HISTANCE hPrevInstance- Всегда равен 0. Раньше (в Windows 3.1) этот параметр указывал на предыдущий экземпляр.
LPSTR lpCmdLine- Указатель на командную строку.
Int nShowCmd- параметр, который отвечает за то, как будет выглядеть наше окно (как оно запуститься- в нормальном, или развернутом виде).

Функция MessageBox()- это стандартная функция, которая показывает окошко с сообщением. Первый параметр- дескриптор окна (равен нулю), второй- это, собственно, ноше сообщение, третий параметр- заголовок окошка, и в последнем параметре мы указываем на то, какие должны быть кнопки, и какой значок. Ну и в конце программы мы должны вернуть операционной системе значение 0 (которое указывает на то, что все произошло без ошибок).

Вот и подошел к концу наш первый урок по WinAPI. Здесь мы разобрали очень (подчеркиваю, очень) простой пример. На деле все будет намного сложнее (а кто сказал, что программирование- это легко? :) ).
До встречи в следующем уроке!
Alex Salo

Навигация
Назад | Список уроков | Вперед
Используются технологии uCoz