Таймер. Программирование таймера
Установка таймера
Вы можете использовать таймер одним из трех способов, в зависимости от параметров функции 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!