ВУЗ:
Составители:
Рубрика:
- 12 -
щение WM_QUIT, означающее, что программа должна закончить работу.
Функция TranslateMessage обрабатывает только поступившие с клавиа-
туры сообщения, преобразуя последовательность событий типа 'клавиша от-
пущена / клавиша нажата' в одно из следующих сообщений
WM_DEADCHAR, WM_SYSCHAR и WM_SYSDEADCHAR.
Последняя в цикле функция DispatchMessage передает сообщение в окно
(реально - связанной с данным окном процедуре
обработки сообщений).
В действительности с каждым окном, создаваемым под управлением
WINDOWS, связана некоторая функция обработки сообщений, именуемая
оконной функцией WinProc. Связывание соответствующей WinProc-
функции с заданным окном осуществляется присвоением имени WinProc-
функции полю lpfnWndProc структуры типа WNDCLASS, определяющей
данное окно, и регистрацией класса окна функцией RegisterClass.
При вызове SendProc или DispatchMessage
в действительности вызыва-
ется именно функция WinProc (ниже приведен пример данной функции,
оформленной как С-функция с Pascal-вызовом); приведенная функция обра-
батывает всего два стандартных сообщения WINDOWS - WM_PAINT (пере-
рисовать окно - в данном простейшем случае вывести в окно заданный текст)
и WM_DESTROY (уничтожить окно)
LONG FAR PASCAL
WinProg_1(HWND hWnd, // идентификатор данного окна
WORD msg, // код кообщения
WORD wParam,
LONG lParam)
{
HDC hdc; // дескриптор устройства вывода
PAINTSTRUCT ps; // параметры отображения окна
RECT rect; // размер клиентской области вывода
switch (msg)
{
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
case WM_PAINT: // полность перерисовать окно
hdc=BeginPaint(hWnd, &ps); // взять дескриптор устройства
GetClientRect(hwnd, (LPRECT) &rect); // определить область вывода
DrawText(hdc, (LPSTR) ‘’Hello, BAKANOV !’’, // выдать текст
-1, (LPRECT) &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hWnd, &ps); // освободить дескриптор устройства
break;
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
case WM_DESTROY: // уничтожить окно
PostQuitMessage(0);
break;
- 12 - щение WM_QUIT, означающее, что программа должна закончить работу. Функция TranslateMessage обрабатывает только поступившие с клавиа- туры сообщения, преобразуя последовательность событий типа 'клавиша от- пущена / клавиша нажата' в одно из следующих сообщений WM_DEADCHAR, WM_SYSCHAR и WM_SYSDEADCHAR. Последняя в цикле функция DispatchMessage передает сообщение в окно (реально - связанной с данным окном процедуре обработки сообщений). В действительности с каждым окном, создаваемым под управлением WINDOWS, связана некоторая функция обработки сообщений, именуемая оконной функцией WinProc. Связывание соответствующей WinProc- функции с заданным окном осуществляется присвоением имени WinProc- функции полю lpfnWndProc структуры типа WNDCLASS, определяющей данное окно, и регистрацией класса окна функцией RegisterClass. При вызове SendProc или DispatchMessage в действительности вызыва- ется именно функция WinProc (ниже приведен пример данной функции, оформленной как С-функция с Pascal-вызовом); приведенная функция обра- батывает всего два стандартных сообщения WINDOWS - WM_PAINT (пере- рисовать окно - в данном простейшем случае вывести в окно заданный текст) и WM_DESTROY (уничтожить окно) LONG FAR PASCAL WinProg_1(HWND hWnd, // идентификатор данного окна WORD msg, // код кообщения WORD wParam, LONG lParam) { HDC hdc; // дескриптор устройства вывода PAINTSTRUCT ps; // параметры отображения окна RECT rect; // размер клиентской области вывода switch (msg) { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . case WM_PAINT: // полность перерисовать окно hdc=BeginPaint(hWnd, &ps); // взять дескриптор устройства GetClientRect(hwnd, (LPRECT) &rect); // определить область вывода DrawText(hdc, (LPSTR) ‘’Hello, BAKANOV !’’, // выдать текст -1, (LPRECT) &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint(hWnd, &ps); // освободить дескриптор устройства break; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . case WM_DESTROY: // уничтожить окно PostQuitMessage(0); break;
Страницы
- « первая
- ‹ предыдущая
- …
- 10
- 11
- 12
- 13
- 14
- …
- следующая ›
- последняя »