Операционная система Microsoft Windows 3.1 для программиста -том 2


Листинг 2.22. Файл edit\edit.cpp - часть 3


// Выводим содержимое буфера на экран MessageBox(hwnd, chBuff, szWindowTitle, MB_OK); } return 0; }

case WM_PAINT: { HDC hdc; PAINTSTRUCT ps;

// Получаем индекс контекста устройства hdc = BeginPaint(hwnd, &ps);

// Выводим текстовую строку TextOut(hdc, 30, 10, "Введите строку и нажмите кнопку 'OK'", 36);

// Отдаем индекс контекста устройства EndPaint(hwnd, &ps); return 0; }

case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd, msg, wParam, lParam); }

В начале исходного текста определены идентификаторы редактора текста и кнопки:

#define ID_EDIT 1 #define ID_BUTTON 2

Функция WinMain приложения EDIT не имеет никаких особенностей. Она создает одно главное окно и организует цикл обработки сообщений. Так как текстовый редактор работает с символьными сообщениями, в цикле обработки сообщений вызывается функция TranslateMessage:

while(GetMessage(&msg, 0, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }

В функции главного окна приложения определены две статические переменные для хранения идентификаторов созданных органов управления - редактора текста и кнопки:

static HWND hEdit; static HWND hButton;

По сообщению WM_CREATE функция окна создает редактор текста и кнопку, вызывая функцию CreateWindow. При создании текстового редактора используется комбинация стилей WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT. При этом создается дочернее окно, которое изначально является видимым и имеет рамку. Для текста задается выравнивание по левой границе:

hEdit = CreateWindow("edit", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT, 30, 30, 300, 30, hwnd, (HMENU) ID_EDIT, hInst, NULL);

Когда главное окно приложения получает фокус ввода, в его функцию передается сообщение WM_SETFOCUS. Но нам нужно, чтобы фокус ввода получил редактор текста, так как именно он будет обрабатывать символьные сообщения, поступающие от клавиатуры. Поэтому в ответ на сообщение WM_SETFOCUS функция главного окна отдает фокус ввода текстовому редактору, вызывая функцию SetFocus:




Начало  Назад  Вперед



Книжный магазин