Таймер. Программирование таймера



Установка таймера

Вы можете использовать таймер одним из трех способов, в зависимости от параметров функции SetTimer.

Первый способ

SetTimer(hWndT, 1, 500, NULL);

Когда оконная процедура получает сообщение WM_TIMER, значение wParam равно значению идентификатора таймера (который равен 1 в приведенном примере), а lParam равно 0.

Второй способ

С помощью второго способа вы можете заставить Windows пересылать сообщение таймера другой функции из вашей программы.

Функция, которая будет получать эти таймерные сообщения, называется функцией "обратного вызова" (call-back). Это функция вашей программы, которую вызывает Windows. Вы сообщаете Windows адрес этой функции, а позже Windows вызывает ее.

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

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

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

Удаление таймера

Снятие таймера осуществляется с помощью функции KillTimer().

BOOL KillTimer(HWND hWnd, UINT uIDEvent);

KillTimer(hwnd,TIMER2);

 


Графическая подсистема Windows

Графические устройства и их контекст

Все графические устройства отображения делятся на две больших группы: растровые устройства и векторные устройства. Большинство устройств, подключаемых к PC — растровые устройства, т. е. они представляют графические образы как шаблон точек. Эта группа включает видеоадаптеры, матричные принтеры и лазерные принтеры. Группа векторных устройств, отображающих графические образы с использованием линий, в основном, состоит из плоттеров.

Контекст устройства содержит много текущих атрибутов, определяющих поведение функций GDI при работе с устройством.

Наиболее общий метод получения контекста устройства и его освобождения состоит в использовании функций BeginPaint и EndPaint при обработке сообщения WM_PAINT:

hdc = BeginPaint (hwnd, &ps);

[другие строки программы]

EndPaint (hwnd, &ps);

Переменная ps — это структура типа PAINTSTRUCT. Поле hdc этой структуры — это описатель контекста устройства, который возвращается функцией BeginPaint.

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

hdc = GetDC (hwnd);

[другие строки программы]

ReleaseDC (hwnd, hdc);

Основная разница между использованием этих функций и комбинации функций BeginPaint и EndPaint состоит в том, что вы можете рисовать в пределах всей рабочей области окна, используя описатель контекста устройства, возвращенный функцией GetDC. Кроме того, функции GetDC и ReleaseDC не делают действительным (не требующим перерисовки) ни один недействительный регион клиентской области окна.

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

hdc = GetWindowDC (hwnd);

[другие строки программы]

ReleaseDC (hwnd. hdc);

 

Атрибуты контекста устройств

Как уже говорилось выше, Windows использует контекст устройства для хранения атрибутов, определяющих поведение функций GDI при выводе. Например, когда вы выводите текст, используя функцию TextOut, вам не надо задавать цвет текста или шрифт. Windows использует контекст устройства для получения этой информации.

Когда программа запрашивает описатель контекста устройства, Windows создает контекст устройства со значениями всех атрибутов по умолчанию. Атрибуты контекста устройства приведены в следующей таблице. Программа может изменить или получить любой из этих атрибутов.

Атрибут кон­­текста устройства Значение по умолчанию Функции для изменения Функции для получения
Режим отображения (Mapping mode) MM_TEXT SetMapMode GetMapMode
Начало координат окна (Window origin) (0,0) SetWindowOrgEx OffsetWindowOrgEx GetWindowOrgEx
Начало координат области вывода (Viewport origin) (0,0) SetViewportOrgEx OffsetViewportOrgEx GetViewportOrgEx
Протяженность окна (Window extent) (1,1) SetWindowExtEx SetMapMode ScaleWindowExtEx GetWindowExtEx
Протяженность области вывода (Viewport extent) (1,1) SetViewportExtEx SetMapMode ScaleViewportExtEx GetViewportExtEx
Перо (Pen) BLACK_PEN SelectObject SelectObject
Кисть (Brush) WHITE_BRUSH SelectObject SelectObject
Шрифт (Font) SYSTEM_FONT SelectObject SelectObject
Битовый образ (Bitmap) Нет SelectObject SelectObject
Текущая позиция пера (Current pen position) (0,0) MoveToEx LineTo PolylineTo PolyBezierTo GetCurrent-PositionEx
Режим фона (Background mode) OPAQUE SetBkMode GetBkMode
Цвет фона (Background color) Белый SetBkColor GetBkColor
Цвет текста (Text color) Черный SetTextColor GetTextColor
Режим рисования (Drawing mode) R2_COPYPEN SetROP2 GetROP2
Режим растяжения (Stretching mode) BLACKONWHITE SetStretchBltMode GetStretchBlt-Mode
Режим закрашивания многоугольников (Polygon filling mode) ALTERNATE SetPolyFillMode GetPolyFillMode
Межсимвольный интервал (Intercharacter spacing) 0 SetTextCharacter-Extra GetTextCharac-terExtra
Начало координат кисти (Brush origin) (0,0) в экранных координатах SetBrushOrgEx GetBrushOrgEx
Область отсечения (Clipping region) Нет SelectObject SelectClipRgn IntersectClipRgn OffsetClipRgn ExcludeClipRgn SelectClipPath GetClipBox

 


Дата добавления: 2019-02-13; просмотров: 233; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!