Четверг, 16.05.2024, 15:36
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » Visual C++ и MFC

Минимальное Win32-приложение

Минимальное Win32-приложение


Итак, давайте попробуем проанализировать общую структуру программы для
Windows.


Минимальное приложение Windows состоит из трех частей:

  1. главной функции;
  2. цикла обработки сообщений;
  3. оконной функции;


Выполнение любого Windows-приложения начинается с главной функции. Она
содержит код, осуществляющий настройку (инициализацию) приложения в среде
операционной системы Windows. Точно так же, как функция main() является "точкой
входа" в консольное приложение, которое мы разрабатывали до сих пор, функция
WinMain() является "точкой входа" в практически любую написанную под Windows
программу. Видимым для пользователя результатом работы главной функции является
появление на экране графического объекта в виде окна. Последним действием кода
главной функции является создание цикла обработки сообщений. После его создания
приложение становится пассивным и начинает взаимодействовать с внешним миром
посредством специальным образом оформленных данных - сообщений. Обработка
поступающих приложению сообщений осуществляется специальной функцией, которую
называют оконной. Оконная функция уникальна тем, что может быть вызвана только
из операционной системы, а не из приложения которое ее содержит. Тело оконной
функции имеет определенную структуру, о которой мы поговорим далее. Таким
образом, Windows-приложение, как минимум, должно состоять из трех перечисленных
элементов. Рассмотрим пример минимального приложения Windows.


Для этого выберите пункт меню File->New и укажите тип проекта Win32
Application. Естественно, не забудьте дать имя проекту, например, FirstAPI.



Нажмите кнопку OK. Откроется диалоговое окно, где Вам будет предложено
выбрать тип создаваемого проекта. Согласитесь с установками по умолчанию (An
empty project) и нажмите кнопку OK.



В появившемя окне, будет предоставлен результат о работе мастера. Подтвердите
свое намерение создать пустой проект, нажав кнопку OK. Теперь, по аналогии с
консольными приложениями, нам необходимо добавить к пустому проекту CPP-файл.
Давайте проделаем и этот шаг: выберите пункт меню Projеct->Add To
Project->New...



В появившемся диалоговом окне выберите тип создаваемого файла C++ Source File
и укажите в поле File name имя файла, к примеру, FirstAPI.



Ну вот, вся подготовительная работа, для создания первого приложения
проделана. Теперь, непосредственно, сам исходный код программы. Скопируйте его,
и вставьте во внутрь только что созданного CPP файла.

#include <windows.h>
//Файл WINDOWS.H содержит определения, макросы, и структуры
//которые используются при написании приложений под Windows.

//прототип функции, чья реализация приводится в конце программы
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);

char szClassWindow[] = "Каркасное приложение"; /*Имя класса окна*/

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine,
int nCmdShow)
{
HWND hWnd;
MSG lpMsg;
WNDCLASSEX wcl;

//Определение класса окна...

wcl.cbSize = sizeof (wcl); //размер стркутуры WNDCLASSEXA
//CS (Class Style) - стиль класса окна
wcl.style = CS_HREDRAW|CS_VREDRAW;
wcl.lpfnWndProc = WindowProc; //адрес функции окна
wcl.cbClsExtra = 0; //используется Windows
wcl.cbWndExtra = 0; //используется Windows
wcl.hInstance = hInst; //дескриптор данного приложения
//загрузка стандартной иконки
wcl.hIcon = LoadIconA(NULL, IDI_APPLICATION);
//загрузка стандартного курсора
wcl.hCursor = LoadCursorA(NULL, IDC_ARROW);
// заполняем окно белым цветом
wcl.hbrBackground =(HBRUSH)GetStockObject (WHITE_BRUSH);
//указываем что меню наше приложение не содержит
//памятка: мы хотим написать минимальную программу под Windows
wcl.lpszMenuName = NULL;
wcl.lpszClassName = szClassWindow; //имя класса окна
//указываем что у нас нет маленькой иконки для связи с классом окна
wcl.hIconSm=NULL;

//теперь нам необходимо зарегестрировать класс окна
if (!RegisterClassEx (&wcl))
return 0;//если что-то не получается - выход
//создаем окно и присваиваем переменной hWnd дескриптор окна
hWnd=CreateWindowEx(
0, //расширенный стиль окна
szClassWindow, //имя класса окна
"Каркас программы для Win32 на C++", //заголовок окна
WS_OVERLAPPEDWINDOW, //стиль окна
CW_USEDEFAULT, //х-координата левого верхнего угла окна
CW_USEDEFAULT, //y-координата левого верхнего угла окна
CW_USEDEFAULT, //ширина окна
CW_USEDEFAULT, //высота окна
NULL, //дескриптор родительского окна
NULL, //дескриптор меню окна
hInst, //идентификатор приложения создавшего окна
NULL); //указатель на область данных приложения
//показываем окно и перерисовываем его содержимое
ShowWindow (hWnd, nCmdShow);
UpdateWindow (hWnd);
//запускаем цикл обработки выборки сообщений
while (GetMessage(&lpMsg,NULL,0,0))
{
TranslateMessage(&lpMsg); //трансляция сообщения
DispatchMessage(&lpMsg); //диспетчеризация сообщений
}
return lpMsg.wParam;
}


LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam)
//Данная функция вызывается операционной системой
//и получает в качестве параметров сообщения из очереди
//сообщений данного приложения
{
switch(message)
{
case WM_DESTROY: //сообщение о завершении программы
PostQuitMessage (0);
break;
default:
//все сообщения которые не обрабатываются в данной
//оконной функции попадают сюда
//далее они направляются обратно Windows на обработку
//по умолчанию
return DefWindowProc (hWnd, message, wParam, lParam);
}
return 0;
}//Все!..

Итак, попробуем откомпилировать и запустить наш проект. Для этого зайдите в
пункт меню Build->Execute FirstAPI.exe



В конечном итоге, у Вас должно появиться на экране окно которое должно
совпасть с приведенным на рисунке:



Теперь, когда видны плоды нашего труда, давайте разберем подробно приведенный
код. Итак, минимальное Windows-приложение на языке С++ состоит из двух функций:
главной - WinMain и оконной - WindowProc. Цель WinMain - сообщить системе о
новом для нее приложении, его свойствах и особенностях. Для достижения этой цели
WinMain выполняет следующие действия:

  1. Определяет и регистрирует класс окна приложения;
  2. создает и отображает окно приложения зарегистрированного класса;
  3. создает и запускает цикл обработки сообщений для приложения;
  4. завершает программу при получении оконной функцией соответсвующего
    сообщения.


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


Видимая чась работы каркасного приложения заключается в создании нового окна
на экране. Обратите внимание, что окно отвечает всем требованиям стандартного
окна приложения Windows, то есть его можно развернуть, свернуть, изменить
размер, переместить в другое место экрана и т.д. Чтобы добиться этого мы не
написали ни строчки кода, а просто удовлетворили определенные требования,
предъявляемые к приложениям со стороны Windows.


Тем не менее, разработка приложений исключительно средствами WinAPI (Windows
Application Programming Interface) зянятие не из легких. Мы с Вами будем
разрабатывать приложения с помощью библиотеки классов MFC. О чем Вы собственно и
узнаете из следующих разделов...

Категория: Visual C++ и MFC | Добавил: slava (26.09.2009)
Просмотров: 7860 | Рейтинг: 4.2/5
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]