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


Приложение TMCLOCK - часть 6


Для определения текущего времени обработчик сообщения вызывает функцию time, которая записывает информацию о времени на момент своего вызова в структуру типа time_t, определенную в файле time.h следующим образом:

typedef long time_t;

Для раскодирования информации о времени и представления ее в удобном для обработки виде приложение вызывает функцию localtime. Эта функция возвращает указатель на статическую структуру типа tm, содержащую отдельные компоненты времени. Тип tm описан в файле time.h:

struct tm { int tm_sec; // секунды int tm_min; // минуты int tm_hour; // часы (0...23) int tm_mday; // день месяца (1...31) int tm_mon; // месяц (0...11) int tm_year; // год (календарный год минус 1900) int tm_wday; // номер дня недели // (0...6, 0 - воскресенье) int tm_yday; // день года (0...365) int tm_isdst; // флаг летнего времени (0 - летнее время // не используется) };

Перед выводом обработчик сообщения определяет координаты и размер окна:

GetClientRect(hwnd, &rc);

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

DrawText(hdc, (LPSTR)szBuf, nBufSize, &rc, DT_CENTER | DT_VCENTER | DT_NOCLIP | DT_SINGLELINE);

Параметры функции DrawText подобраны таким образом, чтобы текстовая строка выводилась в центре окна. Параметр DT_CENTER используется для центрирования текста по горизонтали, параметр DT_VCENTER - для центрирования текста по вертикали. Если не указать параметр DT_SINGLELINE, означающий, что в окно выводится только одна строка текста, эта строка окажется в верхней части экрана, то есть не будет отцентрована по вертикали. Параметр DT_NOCLIP обеспечивает более быстрый вывод текста, запрещая проверку области ограничения при выводе

Когда приложение завершает свою работу, обработчик сообщения WM_DESTROY уничтожает оба созданных по сообщению WM_CREATE таймера:

KillTimer(hwnd, CLOCK_TIMER); KillTimer(hwnd, nBeepTimerID);

Функция таймера, предназначенная для выдачи звукового сигнала, очень проста. Ее роль ограничивается именно выдачей звукового сигнала:

void CALLBACK _export TimerProc(HWND hwnd, UINT msg, UINT idTimer, DWORD dwTime) { // Просто выдаем звуковой сигнал MessageBeep(-1); return; }

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

Листинг 7.6. Файл tmclock\tmclock.def

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




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



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