robesh | Дата: Суббота, 18.06.2011, 23:32 | Сообщение # 1 |
Душеприказчик
Группа: Администраторы
Сообщений: 70
Статус: Offline
| Хотя Ню и описал очень подробно, как создавать приложение, но всё намного проще. Первым делом подключаем windows.h В этом файле хранятся все прототипы функций, константы и многое другое, что необходимо для того, чтоб система поняла, что мы от неё хотим. Далее желательно объявить прототип оконной функции. С помощью этой функции будет осуществляться управление программой. Компилятор автоматически называет эту функцию WndProc Code LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); Теперь объявим хэндл (Handle, описатель, дескриптор) главного окна. Фактически, это указатель на окно. Если в дальнейшем будет активная работа с главным окном, удобно сделать хэндл глобальным. И наконец - главная функция. 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
|
|
| |