Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

Пример программы

Давайте рассмотрим пример программы, чтобы вы могли увидеть, как это все работает. Программа BEEPER2 функционально такая же, как и программа BEEPER1 за исключением того, что Windows посылает таймерные сообщения не в WndProc, а в TimerProc.

7.2.3 Третий способ

Третий способ установки таймера напоминает второй, за исключением того, что параметр hwnd функции SetTimer устанавливается в NULL, а второй параметр (обычно идентификатор таймера) игнорируется. Функция возвращает ID таймера:

iTimerID = SetTimer(NULL, 0, wMsecInterval,(TIMERPROC) TimerProc);

Возвращаемое функцией SetTimer значение iTimerID будет равно NULL, если таймер недоступен.

Первый параметр функции KillTimer (обычно описатель окна) также должен быть равен NULL. Идентификатор таймера должен быть равен значению, возвращаемому функцией SetTimer.

KillTimer(NULL, iTimerID);

Параметр hwnd, передаваемый в TimerProc, также должен быть равен NULL.

Такой метод установки таймера используется редко. Он удобен, если в программе в разное время делается много вызовов функции SetTimer, и при этом не запоминаются те таймерные идентификаторы, которые уже использовались.

Теперь, поскольку вы знаете, как использовать таймер в Windows, вы готовы к знакомству с парой полезных программ, использующих таймер.

7.3 Использование таймера для часов

Часы — это наиболее очевидное применение таймера, поэтому давайте рассмотрим два типа часов, одни цифровые, другие аналоговые. Программа DIGCLOCK создает всплывающее окно, которое позиционируется в верхнем правом углу экрана. Программа выводит день недели, дату и время.

Во всех приведенных до сих пор программах использовался стиль окна WS_OVERLAPPEDWINDOW в качестве третьего параметра функции CreateWindow. В программе DIGCLOCK используется стиль окна:

WS_POPUP | WS_DLGFRAME | WS_SYSMENU

Это выражение задает "всплывающее" (popup) окно с рамкой окна диалога и системным меню. Стиль всплывающего окна чаще используется в окнах диалога и окнах сообщений, и очень редко для приложений. Кроме этого в программе DIGCLOCK используется еще и другой вариант вызова функции ShowWindow:

ShowWindow(hwnd, SW_SHOWNOACTIVATE);

Обычно окно программы становится активным при запуске. SW_SHOWNOACTIVATE сообщает Windows о том, что программа DIGCLOCK не должна активизировать окно. Однако вы можете сделать активным окно DIGCLOCK, щелкнув на нем мышью, или нажав клавиши <Alt>+<Tab> или <Alt>+<Esc>. Хотя в программе DIGCLOCK нет символа системного меню, но если она активна, вы по-прежнему можете получить доступ к системному меню, нажимая комбинацию клавиш <Alt>+<Spacebar> (<Alt>+<пробел>).

7.3.1 Позиционирование и изменение размеров всплывающего окна

Всплывающее окно программы DIGCLOCK устанавливается в верхнем правом углу экрана. Окно должно быть достаточно большим, чтобы вместить две строки текста по 16 символов в каждой. Процедура SizeTheWindow в DIGCLOCK.С определяет подходящие параметры для использования их при вызове функции CreateWindow.

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

Размера текста в сочетании с информацией, полученной от GetSystemMetrics, достаточно для получения начального положения и размеров окна.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]