Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой (ОС).docx
Скачиваний:
17
Добавлен:
11.06.2015
Размер:
226.75 Кб
Скачать

2.4 Расширение функциональности WndProc

Назначением функции WndProc является обработка сообщений, получаемых приложением. Обработка таких сообщений обычно реализуется путем использования функции Switch.

Для начала реализуем обработку сообщения WM_PAINT. Приложение получает это сообщение, когда возникает необходимость в обновлении какой-либо области окна приложения. При создании окна данное сообщение передается для указания на необходимость обновления всего окна.

При обработке сообщения WM_PAINT сперва необходимо вызвать функцию BeginPaint, а в завершение следует вызвать функциюEndPaint. Между вызовами этих двух функций обрабатывается логика по отображению текста, кнопок и других элементов управления в окне. Данное приложение отображает в окне строку "Hello, World!". Для отображения текста следует использовать функциюTextOut.

Обычно приложение обрабатывает множество других сообщений, таких как WM_CREATE и WM_DESTROY. Ниже приведен код простой, но полноценной функции WndProc:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

PAINTSTRUCT ps;

HDC hdc;

TCHAR greeting[] = _T("Hello, World!");

switch (message)

{

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

TextOut(hdc,

5, 5,

greeting, _tcslen(greeting));

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

break;

}

return 0;

}

Итак, сейчас упрощенно, что же произойдет, если щелкнуть по окну левой кнопкой мыши.

  1. Пользователь нажимает левую кнопку мыши в то время когда курсор мыши находится над рабочей областью окна.

  2. Windows помещает сообщение WM_LBUTTONDOWN в очередь потока.

  3. Цикл обработки сообщения должен вынуть сообщение с помощью функции GetMessage и передать его на обработку функции DispatchMessage.

  4. Функция DispatchMessage находит окно, которому предназначено сообщение и помещает сообщение в его очередь.

  5. Функция окна обрабатывает сообщение WM_LBUTTONDOWN и возвращает результат.

  6. Тело цикла заканчивается, и управление снова передается функции GetMessage для ожидания новых сообщений.

Пример рабочего кода для вышеописанного алгоритма можно посмотреть в приложении 1.

3. С чего начать? Переход от Win32 к Win64

Приятная особенность Win64 и процессорной архитектуры x64 заключается в том, что они достаточно сильно отличаются от своих предшественников - как раз настолько, чтобы вызывать интерес, в то же время не требуя основательного переобучения. Хотя мы, предпочитаем считать, будто при переходе на платформу x64 удастся отделаться простой перекомпиляцией своих программ, реальность такова, что нам все равно придется долго возиться с ними в отладчике. И здесь хорошее понимание новой программно-аппаратной платформы будет важным подспорьем.

Системы x64 хороши еще и тем, что они - в отличие от систем на основе процессоров Itanium - позволяют использовать либо Win32, либо Win64 на одном компьютере без серьезных потерь в производительности. И несмотря на некоторые, весьма туманные различия между реализациями x64 от Intel и AMD x64-совместимая версия Windows должна работать с любой из них. Вам не понадобятся отдельные сборки Windows для x64-процессоров AMD и Intel.