Flying Cow
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Создание игр посредством прямого программирования » Уроки по WinApi » Создание приложения WinAPI ((урок от robesh))
Создание приложения WinAPI
robeshДата: Суббота, 18.06.2011, 23:32 | Сообщение # 1
Душеприказчик
Группа: Администраторы
Сообщений: 70
Репутация: 0
Статус: Offline
Хотя Ню и описал очень подробно, как создавать приложение, но всё намного проще.
Первым делом подключаем windows.h
Code
#include windows.h

В этом файле хранятся все прототипы функций, константы и многое другое, что необходимо для того, чтоб система поняла, что мы от неё хотим.
Далее желательно объявить прототип оконной функции. С помощью этой функции будет осуществляться управление программой. Компилятор автоматически называет эту функцию WndProc
Code
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

Теперь объявим хэндл (Handle, описатель, дескриптор) главного окна. Фактически, это указатель на окно. Если в дальнейшем будет активная работа с главным окном, удобно сделать хэндл глобальным.
Quote
HWND hWnd;

И наконец - главная функция.
Code
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{

Подробное описание каждого аргумента есть в уроке от Ню, но если Ваша деятельность не связана с программированием, то можно в рамках этого урока это бесценное знание упустить.
Далее следует стандартный шаблон WinAPI приложения. Алгоритм следующий:
1) Регистрируем приложение.
Code
MSG msg;    
WNDCLASS wcl;

wcl.hInstance = hInstance; // дескриптор данного приложения

     wcl.lpszClassName = szwinname; // имя класса окна

     wcl.lpfnWndProc= WindowFunc;  // оконная функция

     wcl.style = 0; // стиль по умолчанию

     wcl.hIcon = LoadIcon (NULL, IDI_APPLICATION);//как exe - MSDOS

            // IDI_ASTERISK - перевернутый воскл знак (информация)

            // IDI_EXCLAMATION - внимание (воскл знак в желтом тр-ке)

            // ID_HAND - знак стоп (два скрещенных отрезка в красном круге)

            // IDI_QUESTION - вопрос в белом круге

     wcl.hCursor = LoadCursor(NULL,IDC_ARROW); // курсор выводится как стрелка

                     // CROSS (+), IBEAM (верт черта), (WAIT) пес часы

     wcl.lpszMenuName = NULL;

     wcl.cbClsExtra = 0;

     wcl.cbWndExtra = 0;

     // цвет окна белый

     wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

     if(!RegisterClass(&wcl))   // регистрация окна

       return 0;

wcl - структура окна. Заполняя поля, мы объясняем системе, какое от неё мы хотим окно. RegisterClass(&wcl) регистрирует окно в системе.

2) Создание окна.
Code
hWnd = CreateWindow(szWindowClass, title, WS_OVERLAPPEDWINDOW, x, y, width, height, hWndParent, hMenu, hInstance, 0);

szWindowClass - имя класса, title - надпись, WS_OVERLAPPEDWINDOW - стиль окна, width, height - ширина/высота, hWndParent - хэндл родительского окна (для главного NULL, ибо оно - прародитель), hMenu - число, которое является идентефикатором меню (для главного тоже NULL. Если NULL - окно обрабатывается оконной функцией), hInstance - интерфейс этого приложения, 0 - указатель на lParam, который здесь не нужен.
3) Отображение.
Code
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

Тут происходит отображение окна и его перерисовка. Далее можно закинуть на окно свои кнопочки, поля ввода, списки и прочее, с помощью функции CreateWindow(), что, возможно, будет рассматриваться позже.
4) Обработка сообщений.
Code

while(GetMessage(&msg,NULL,0,0))

     {

       TranslateMessage(&msg);// транслировать клавиши

                            // если убрать, то не будет реагировать на клавиши

       DispatchMessage(&msg);// вернуть управление Windows

     }

     return msg.wParam;

}

Здесь обработчик сообщений берёт приходящее из системы сообщение, пропускает через оконную функцию и возвращает управление пользователю.
И наконец - оконная функция. Всё человеческое взаимодействие с приложением происходит через неё. Каркас приложения можно оставить таким, каким его предлагает компилятор, но чтобы программа делала то, что от неё требуется, необходимо ввести оконную функцию.
Code
LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam, LPARAM lParam)

{

     switch(message)

     {

       case WM_DESTROY:

         PostQuitMessage(0);

         break;

       default:

         return DefWindowProc(hwnd,message,wParam,lParam);

     }

     return 0;

}

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

Полностью каркас приложения с русскими коментариями можно взять здесь. http://flyingcow.ucoz.ru/publ/common/karkas_prilozhenija/4-1-0-34


 
Форум » Создание игр посредством прямого программирования » Уроки по WinApi » Создание приложения WinAPI ((урок от robesh))
  • Страница 1 из 1
  • 1
Поиск:

Copyright Flying Cow © 2024Сайт создан в системе uCoz