Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Некоторые функции, имеющие отношение к сообщению WM_PAINT.

Читайте также:
  1. XI. Современное отношение между человеком и техникой. Человек-техник древности.
  2. А каково вообще отношение Патриархии к Интернету и к развитию информационных технологий?
  3. А) Взаимоотношение знания и практики
  4. Б) Некоторые специальные проблемы
  5. Б) Характеризует разное отношение человека к ситуации
  6. Белки, шотландцы и некоторые другие
  7. Бхагван, важно ли иметь какое-либо отношение к жизни?

Функция UpdateWindow имеет следующий прототип:

void UpdateWindow(HWND hwnd);

Эта функция посылает сообщение WM_PAINT функции окна, идентификатор которого задан в качестве параметра hwnd. Сообщение посылается в обход очереди сообщений приложения, и только в том случае, если для окна существует непустая область обновления. Если в окне обновлять нечего, сообщение WM_PAINT не посылается.

При помощи функции InvalidateRect вы можете объявить любую область окна как требующую обновления. Прототип функции:

void InvalidateRect(HWND hwnd, LPRECT lprc, BOOL fErase);

Первый параметр (hwnd) функции является идентификатором окна, для которого выполняется операция. Второй параметр (lprc) - дальний указатель на структуру типа RECT, определяющую прямоугольную область, подлежащую обновлению. Третий параметр (fErase) определяет необходимость стирания фона окна. Если этот параметр задан как TRUE, фон окна подлежит стиранию.

Функция ValidateRect удаляет прямоугольную область из списка областей, подлежащих обновлению. Она имеет следующий прототип:

void ValidateRect(HWND hwnd, LPRECT lprc);

Первый параметр определяет идентификатор окна, второй является дальним указателем на структуру типа RECT, определяющую прямоугольную область, которая должна быть исключена из области обновления. Если в результате вызова функции ValidateRect в окне не остается областей, подлежащих обновлению, сообщение WM_PAINT удаляется из очереди сообщений приложения.

 

При обработке сообщения WM_PAINT перед выводом текста вызывается функция BeginPaint, возвращающая идентификатор так называемого контекста отображения (display context):

hdc = BeginPaint(hwnd, &ps);

Контекст отображения используется функцией вывода текста - TextOut:

TextOut(hdc, 10, 10, "Сообщение WM_PAINT", 18);

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

EndPaint(hwnd, &ps); HDC hdc;-индекс контекст устройстваHWND hwnd;-идентификатор окна Идентификатор окна задаётся при определении класса окна:class Window{ HWND hwnd; // Идентификатор окна int errno; // Флаг ошибкиpublic: // Конструктор Window (HINSTANCE, LPSTR, LPSTR); // Проверка флага ошибки int Error(void) { return errno; } // Отображение окна void Show(int nCmdShow) { ShowWindow(hwnd, nCmdShow); } // Передача функции WndProc сообщения WM_PAINT void Update(void) { UpdateWindow(hwnd); }};// В классе Window определена переменная типа HWND для хранения идентификатора окна и флаг ошибок errno. Там же определены конструктор, функции-методы Show (отображение окна), Update (передача в функцию окна сообщения WM_PAINT) и Error (проверка флага ошибок).

// Конструктор класса Window

// -------------------------------------

Window::Window (HINSTANCE hInstance, LPSTR szClassName,

LPSTR szWindowTitle)

{

// Сбрасываем флаг ошибки

errno = 0;

// Создаем окно

hwnd = CreateWindow(

szClassName, // имя класса окна

szWindowTitle, // заголовок окна

WS_OVERLAPPEDWINDOW, // стиль окна

CW_USEDEFAULT, // задаем размеры и расположение

CW_USEDEFAULT, // окна, принятые по умолчанию

CW_USEDEFAULT,

CW_USEDEFAULT,

0, // идентификатор родительского окна

0, // идентификатор меню

hInstance, // идентификатор приложения

NULL); // указатель на дополнительные параметры

// Если при создании окна были ошибки,

// устанавливаем флаг ошибки

if(!hwnd)

{

errno = 1;

return;

}

}

Конструктор класса Window сбрасывает флаг ошибок и создает окно, вызывая для этого функцию CreateWindow. Если при создании окна были ошибки, устанавливается флаг ошибок.

 

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

Функция TextOut, которая используется для вывода текста, также относится к интерфейсу GDI. Она имеет пять параметров:

BOOL TextOut(HDC hdc, int nXStart, int nYStart,LPCSTR lpszString, int cbString);

Первый параметр (hdc) определяет используемый контекст отображения. При обработке сообщения WM_PAINT контекст отображения создается функцией BeginPaint для того окна, идентификатор которого указывается этой функции в качестве первого параметра.

Второй (nXStart) и третий (nYStart) параметры задают координаты (x, y) начальной позиции, начиная с которой будет выполняться вывод текста.

Четвертый параметр (lpszString) является дальним указателем на выводимую строку, длина которой определяется последним, пятым параметром (cbString).

Функция TextOut не имеет параметров, определяющих шрифт, размер букв, цвет фона, цвет букв и т. п. Все эти характеристики текста хранятся в структуре контекста отображения. Идентификатор контекста отображения передается функции TextOut в качестве первого параметра.

Когда вы создаете контекст отображения, Windows заполняет соответствующую структуру значениями по умолчанию.

Используемая система координат также определяется в контексте отображения.

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

hdc = GetDC(hwnd);TextOut(hdc, 10, 40, "Сообщение WM_LBUTTONDOWN", 24);ReleaseDC(hwnd, hdc);

Для получения контекста отображения в этом случае следует воспользоваться функцией GetDC. После использования необходимо освободить контекст, вызвав функцию ReleaseDC.


Дата добавления: 2015-09-03; просмотров: 95 | Нарушение авторских прав


Читайте в этой же книге: Элементы интерфейса Windows | Значок (пиктограмма) | Выбор семейств шрифтов. Окна сообщений Windows. Окна диалога Windows. Шрифты Windows. Растровые изображения Windows. Перья Windows. Кисти Windows. | Выбор семейств шрифтов. Прием и передача сообщений Windows. Формат сообщения Windows. Как создаются сообщения Windows. Ответ на сообщение Windows. Цикл обработки сообщений. | Соглашения о вызовах | Стандартные элементы управления | Новое поколение Windows. Передача информации с помощью сообщений. Независимость от драйверов аппаратуры. Plug-and-play. Библиотеки динамической компоновки. 16 бит против 32 бит. | Новое поколение Windows. Различные аппаратные платформы. Различные программные платформы. Многопроцессорные системы. Гибкость. | Требования к программному и аппаратному обеспечению Windows приложений. Требования к программному обеспечению. Требования к аппаратуре. | Логическая система координат |
<== предыдущая страница | следующая страница ==>
Доступ к оболочке Windows. Поля вывода. Изменение пределов поля вывода и окна. Координаты, определяемые пользователем. Выбор начальных атрибутов окна.| Вывод окна. Изменение вида окна. Часто используемые элементы управления и диалоговые окна. Статические элементы управления. Элементы управления - кнопки.

mybiblioteka.su - 2015-2024 год. (0.017 сек.)