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


Приложение TIMBEEP - часть 2


/Листинг 7.2. Файл timbeep\wndproc.cpp

/ ===================================== // Функция WndProc // =====================================

#define STRICT #include <windows.h>

#define BEEP_TIMER 1

LRESULT CALLBACK _export WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {

switch (msg) { case WM_CREATE: { // Создаем таймер, посылающий сообщения // функции окна примерно раз в секунду SetTimer(hwnd, BEEP_TIMER, 1000, NULL); return 0; }

case WM_TIMER: { // В ответ на сообщение таймера выдаем // звуковой сигнал MessageBeep(-1); return 0; }

case WM_DESTROY: { // Перед уничтожением окна уничтожаем // созданный ранее таймер KillTimer(hwnd, BEEP_TIMER);

PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd, msg, wParam, lParam); }

По сообщению WM_CREATE (оно приходит при создании окна) функция окна создает таймер:

SetTimer(hwnd, BEEP_TIMER, 1000, NULL);

Этот таймер будет каждую секунду посылать сообщение с кодом WM_TIMER в функцию окна с идентификатором hwnd, то есть в функцию главного окна приложения.

Обработка сообщения таймера сводится к простой выдаче звукового сигнала.

Перед уничтожением окна в функцию окна передается сообщение WM_DESTROY, по которому приложение уничтожает созданный ранее таймер:

KillTimer(hwnd, BEEP_TIMER);

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

Обратите внимание, что во время перемещения главного окна приложения или во время изменения его размеров выдача звуковых сигналов приостанавливается. Это связано с тем, что приложение занято обработкой сообщений от мыши и не реагирует на сообщения таймера. После завершения процесса перемещения окна или изменения его размеров вы можете получить сразу два звуковых сигнала с интервалом, заметно меньшим одной секунды, что и доказывает нерегулярность поступления сообщений WM_TIMER.

Файл определения модуля для приложения TIMBEEP приведен в листинге 7.3.

Листинг 7.3. Файл timbeep\timbeep.def

; ============================= ; Файл определения модуля ; ============================= NAME TIMBEEP DESCRIPTION 'Приложение TIMBEEP, (C) 1994, Frolov A.V.' EXETYPE windows STUB 'winstub.exe' STACKSIZE 5120 HEAPSIZE 1024 CODE preload moveable discardable DATA preload moveable multiple




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



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