Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Но как получить от Windows сообщение WMPAINT? Один из способов — вызвать функцию updatewindow перед входом в цикл обработки сообщений. Другой возможный вариант — вызвать функцию invaiidateRect. В нашем приложении используется функция updatewindow, которая вынуждает операционную систему генерировать сообщение WMPAINT.

Нам необходимо сделать лишь некоторые изменения в исходном тексте программы, а именно — в обработчике сообщения WMPAINT ОКОННОЙ процедуры wndProc. Для того чтобы вывести текст в окно приложения, воспользуемся функцией TextOut в обработчике сообщения WMPAINT. В качестве параметров эта функция принимает дескриптор контекста устройства отображения, начальные координаты выводимого текста, адрес и размер строки текста. Контекст устройства в операционных системах Windows представляет собой структуру данных, в которой содержится описание графических атрибутов таких устройств, как дисплей или принтер. Контекст устройства позволяет разрабатывать аппаратно-независимый графический интерфейс пользователя.

Фрагмент кода обработчика сообщения WMPAINT В результате таких модификаций будет выглядеть так, как показано в листинге 4.1.
Листинг 4.1. Обработчик сообщения WM_PAINT
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps) ;
// Далее добавлен код для вывода -строки сообщения
// в окно приложения
TextOut(hdc, 200, 100, textMes, lenText);
EndPaint(hWnd, &ps) ;
break;

Полный текст программы (назовем ее HELLOWC) на С + + с учетом сделанных изменений приведен в листинге 4.2.
Листинг 4.2. Программа, выводящая строку символов в окно приложения
// HELLOWC.срр : точка входа нашего приложения
#include "stdafx.h"
#include "HELLOWC.h"
#define MAX LOADSTRING 100
// Объявление глобальных переменных
TCHAR
TCHAR
HINSTANCE hlnst;
szTitle[MAX LOADSTRING];
szWindowClass[MAX LOADSTRING];
// дескриптор экземпляра приложения
// заголовок окна приложения
NG]; // имя оконного класса
// Опережающие ссылки на функции, определенные в этом модуле LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hlnstance, HINSTANCE hPrevInstance,
// TODO: Place code here
MSG msg;
HACCEL hAccelTable;
// Инициализация строковых ресурсов - можно пропустить
// при первом чтении
LoadString(hlnstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hlnstance, IDC_HELLOWC, szWindowClass, MAX_LOADSTRING);
// Регистрация класса окна
MyRegisterClass(hlnstance) ;
// Инициализация приложения
if (!Initlnstance(hlnstance, nCmdShow))
{
return FALSE;
}
ATOM
BOOL
MyRegisterClass(HINSTANCE hlnstance);
Initlnstance(HINSTANCE, int);
LPTSTR lpCmdLine, int nCmdShow)

Цикл обработки сообщений
while (GetMessage(&msg, NULL, 0, 0))
{
if (ITranslateAccelerator(msg.hwnd, hAccelTable, &msg)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
// Функция MyRegisterClass(), выполняющая регистрацию
// класса окна приложения
ATOM MyRegisterClass(HINSTANCE hlnstance)
WNDCLASSEX wcex;
wcex.cbSize
wcex.style
wcex.lpfnWndProc
wcex.cbClsExtra
wcex.cbWndExtra
wcex.hlnstance
wcex.hicon
wcex.hCursor
wcex.hbrBackground
wcex.IpszMenuName
wcex.IpszClassName
wcex.hlconSm
sizeof(WNDCLASSEX);
CS_HREDRAW | CS_VREDRAW;
(WNDPROC)WndProc;
0;
0;
hlnstance;
Loadlcon(hlnstance, (LPCTSTR)IDI_HELLOWC);
LoadCursor(NULL, IDC_ARROW);
(HBRUSH)(COLOR_WINDOW + 1);
(LPCTSTR) IDCJiELLOWC;
szWindowClass;
Loadlcon(wcex.hlnstance, (LPCTSTR)IDI SMALL)
return RegisterClassEx(&wcex);
)
hAccelTable = LoadAccelerators(hlnstance, (LPCTSTR)IDC HELLOWC);
// Функция Initlnstance(HANDLE, int), выполняющая сохранение
// дескриптора экземпляра приложения и отображение главного
// окна приложения
BOOL Initlnstance(HINSTANCE hlnstance, int nCmdShow)
{
HWND hWnd;
hlnst = hlnstance; // сохраняем дескриптор приложения
// в глобальной переменной
hWnd = CreateWindow(szWindowClass, szTitle,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0,
CWJJSEDEFAULT, 0, NULL, NULL,
hlnstance, NULL);
if (IhWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow) ;
UpdateWindow(hWnd);
return TRUE;
}
// Функция WndProc(HWND, unsigned, WORD, LONG) выполняет обработку
// сообщений главного окна приложения. В этой реализации имеются два
// обработчика сообщений:
// WM_PAINT - прорисовка главного окна
// WM_DESTROY - уничтожение окна приложения
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam)
(
PAINTSTRUCT ps;
HDC hdc;
// Эти переменные добавлены автором для демонстрации
// вывода сообщения в окно приложения


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru