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

Вывод в окно

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

case WM_PAINT:{ PAINTSTRUCT ps; HDC hdc = BeginPaint(&ps) //настройки инструментов рисования и вывод в окно EndPaint(&ps); return 0; }

Переменная ps типа PAINTSTRUCT содержит параметры обновления окна. Её поля заполняет функция BeginPaint. Эта же функция подключает контекст отображения и возвращает дескриптор контекста отображения.

Чтобы вызвать сообщение WM_PAINT из других сообщений нужно воспользоваться функцией UpdateWindow(hwnd). Функция InvalidateRect(hwnd,NULL,TRUE); - добавляет прямоугольник в область перерисовки окна. Hwnd – обновляемое окно, NULL – указывает на нуждающийся в обновлении прямоугольник. Если стоит NULL – обновляется вся рабочая область. True – нужно ли перекрашивать фон.

Установка атрибутов контекста отображения

Для получения значения цвета существует функция COLORREF RGB(int Red, int Green, int Blue); Эта функция возвращает значение цвета в виде интенсивности красной, зелёной и голубой составляющих цвета. Интенсивность изменяется от 0 до 255. Например, установим новый цвет фона для вывода текста.

SetBlcColor(hdc, RGB(0,255,0);

Алгоритм создания и выбора контекста отображения инструмента рисования:

  1. Описать дескриптор инструмента рисования HBRUSH hBrush;

  2. Используя соответствующую функцию создать новый инструмент рисования. hBrush = CreateHatchBrush(HS_CROS, RGB(255,0,0));

  3. Выбрать новый инструмент рисования в контекст отображения. HBRUSH hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);

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

  5. Возвращаем в контекст отображения инструмент по умолчанию SelectObject(hdc,hOldBrush);

TextOut(hdc,x,y,”текст”,strlen(“текст”))

Нарисовать график функции y=25*cos(x) и заставить его переливаться различными цветами.

Switch(msg){

case WM_SIZE:{

cx=LOWORD(lParam); cy=HIWORD(lParam);

return 0;

}

case WM_Paint:{

PAINTSTRUCT ps; HDC hdc=BeginPaint(hwnd &ps); graph(cx,cy,h,dc);

EndPaint(hwnd,&ps);

return 0;

}

case WM_TIMER:{ InvalidateRect(hwnd,NULL,TRUE); UpdateWindow(hwnd); return 0;

}

case WM_CREATE:{ SetTimer(hwnd,1,1000,TRUE); return 0; } case WM_DESTROY:{ KillTimer(hwnd,1); PostQuitMessage(0); return 0; }

}

void graph(int cx, int cy, HDC hdc){ float X[100]; float Y[100]; int xo=30,//левый край графика xr = cx-30,//правый yo= 30,//верхний yc = cy/2, //середина amp = yc-yo; //амплитуда

float ymax=0, ymin=0;

//рисуем ось ординат MoveToEx(hdc,xo,cy-yo/2,NULL); LineTo(hdc,xo,yo-yo/2); //рисуем ось абсцисс MoveToEx(hdc,xo,yc,NULL); LineTo(hdc,xr+xo/2,yc) //определяем максимум и минимум функции for(int i = 0; i<100; i++){ X[i]=0,31415926535*i; Y[i] = 25*cos(X[i]); if (ymax<Y[i]) ymax=Y[i]; if (ymax>Y[i]) ymin=Y[i]; }

//устанавливаем масштаб по оси

float dy = (float)amp/ymax

//устанавливаем масштаб по оси x

float dx=(float)(xr-xo)/X[99]-X[0]);

//для рисования создаём перо

int j = rand()*10; HPEN hPen=CreatePen(PS_SOLID,2,RGB(j,255-j,j); SelectObject(hdc,hPen);

//устанавливаем курсор в первую точку графика

MoveToEx(hdc,xo,(int)(yc-dy*Y[0]),NULL);

//выводим линии от предыдущей линии к текущей for(i=1;<100;i++){ int x=int(dx*(X[i]-X[0])+XO); int y=int(yc-dy*Y[i]); LineTo(hdc,x,y); } }

Меню используется для выбора команд и для изменения режимов работы приложения. Основным отображаемым элементов меню является строка или графический объект. Строка может быть отмечена галочкой или жирной точкой. Если при выборе строки на экране должна появиться диалоговая панель к слову справа добавляют многоточие. Если с пунктом меню связана клавиша быстрого вызова, то она также отображается в названии команды.

Любое прикрывающееся или временное окно может иметь меню. Главное меню находится ниже заголовка окна и его строки расположены в одну или несколько линий. При выборе строки главного меню как правило активизируется раздел меню. Раздел меню представляет собой временное меню. Строки временного меню расположены в один или несколько столбцов. Если временное меню может появляться в любом месте рабочей области, то оно называется плавающим. Оно «всплывает» после щелчка клавиши мыши (обычно правой) и место «всплытия» связывают с координатами курсора мыши. Окно может иметь системное меню. Если оно есть, то расположено слева от текста заголовка окна.

По способу создания различают статические и динамические меню. Статические меню создают до запуска приложения и не изменяют в процессе работы приложения. Динамические меню создают в процессе работы приложения и после его создания можно изменять.