- •5. Программирование в операционной системе windows
- •5.1. Основные концепции Windows
- •Контрольные вопросы
- •5.2. Архитектура, управляемая событиями
- •Контрольные вопросы
- •5.3. Примеры программ.
- •Int winapi WinMain (hinstance hInstance,
- •Int CmdShow)
- •Int winapi WinMain (hinstance hInstance,
- •Int MessageBox (hwnd hWnd, lpctstr lpText, lpctstr lpCaption, uint uType).
- •Int winapi WinMain(hinstance hInstance, hinstance hPrevInstance, lptstr lpCmdLine, int nCmdShow)
- •If (!RegisterClassEx(&wc))
- •If (!hMainWnd)
- •Int nWidth,
- •Int nHeight,
- •Контрольные вопросы
- •5.4. Программирование графики
- •Bool InvalidateRect (hwnd hWnd, const rect* lpRect, bool bErase);
- •Bool InvalidateRgn (hwnd hWnd, hrgn hRgn, bool bErase);
- •Bool ClientToScreen(hwnd hWnd, lpoint lpPoint); bool ScreenToClient(hwnd hWnd, lpoint lpPoint);
- •Контрольные вопросы
- •5.5. Рисование линий, фигур, текста
- •GetCurrentPositionEx (hdc, &pt);
- •Bool Polyline (hdc hdc, const point* lppt, int cPoints);
- •Bool PolylineTo (hdc hdc, const point* lppt, dword cPoints);
- •Bool Arc (hdc hdc, int xLeft, int yTop, int xRight, int yBottom, int xStart, int yStart, int xEnd, int yEnd);
- •SetArcDirection (hdc, ad_clockwise);
- •Bool Rectangle (hdc hdc, int xLeft, int yTop, int xRight int yBottom);
- •Bool Ellipse (hdc hdc, int xLeft, int yTop, int xRight, int yBottom);
- •Bool Polygon (hdc hdc, const point * lpPoints, int nCount);
- •Контрольные вопросы
- •5.6. Средства ввода
- •If (!RegisterClassEx(&wc))
- •X, y, width, height, hParent,
- •If (!hWnd)
Int MessageBox (hwnd hWnd, lpctstr lpText, lpctstr lpCaption, uint uType).
Параметры функции интерпретируются следующим образом:
- hWnd – дескриптор родительского окна, он принимает значение NULL, если родительского окна нет;
- lpText – указатель на строку, содержащую текст сообщения;
- lpCaption – указатель на строку, содержащую текст заголовка диалогового окна;
- uType – параметр задает комбинацию флагов, задающих количество и типы кнопок в диалоговом окне, а также наличие заданной пиктограммы.
Сейчас для нас важно льшь то, что эта функция создает диалоговое окно, относящееся к стандартному оконному классу диалоговых окон. А каждый стандартный оконный класс диалоговых окон содержит свою оконную процедуру, спрятанную в недрах Windows. Кроме того, выполняя функцию MessageBox, система создает невидимый для программиста цикл обработки сообщений, который обслуживает созданное окно диалога.
Вот почему в программе нет ни оконной процедуры, ни цикла обработки сообщений, и она претендует на титул самой короткой программы для Windows.
Полноценная программа для Windows должна содержать как минимум две функции:
- WinMain – главную функцию, в которой создается основное окно программы и запускается цикл обработки сообщкний;
-WndProc – оконную процедуру, обеспечивающую обработку сообщений для основного окна программы.
Основное назначение функции WinMain заключается в следующем:
Шаг 1. Подготовить и зарегистрировать класс окна с требуемыми характеристиками.
Шаг 2. Создать экземпляр окна зарегистрированного класса.
Шаг 3. Пока не произошло завершающее программу событие выполнять:
- извлечь очередное сообщение из очереди сообщений;
- передать через Windows очередное сообщение оконной функции.
Шаг 4. Завершить программу.
Основное назначение оконной процедуры WndProc заключается в обработке очередного сообщения.
5.3.2. Полноценная программа для Windows. Для подготовки к написанию программы необходимо выполнить действия, приведенные в начале первого примера настоящего раздела, и ввести следующий текст.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//---------------------------------------------------------------------------
Int winapi WinMain(hinstance hInstance, hinstance hPrevInstance, lptstr lpCmdLine, int nCmdShow)
{
HWND hMainWnd;
char szClassName[] = "MyClass";
MSG msg;
// Структура класса окна
WNDCLASSEX wc;
wc.cbSize = sizeof(wc);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// Регистрируем класс окна