69997

КОНТЕКСТЫ УСТРОЙСТВ. ВЫВОД ТЕКСТА И ГРАФИКИ

Лабораторная работа

Информатика, кибернетика и программирование

Цель: Ознакомление с концепцией контекстного представления устройств в современных операционных системах, получение практических навыков по составлению, написанию и отладке программ, осуществляющих аппаратно-независимый вывод информации на экран дисплея, принтеры...

Русский

2014-10-13

65.5 KB

8 чел.

Министерство образования и науки Украины

Харьковский Национальный Университет Радиоэлектроники

Кафедра ЭВМ

Лабораторная работа №2

Тема: «КОНТЕКСТЫ УСТРОЙСТВ. ВЫВОД ТЕКСТА И ГРАФИКИ»

Выполнил:                                                                      Проверил:

ст. гр. КИ-08-4                                                                Бугрий А. М.

Кравец Артём Валерьевич

2009

Лабораторная работа №2

Тема: «КОНТЕКСТЫ УСТРОЙСТВ. ВЫВОД ТЕКСТА И ГРАФИКИ»

Цель: Ознакомление с концепцией контекстного представления устройств в современных операционных системах, получение практических навыков по составлению, написанию и отладке программ, осуществляющих аппаратно-независимый вывод информации на экран дисплея, принтеры, и другие периферийные устройства, представленные контекстами.

Задание:

Вариант 1

Написать, с использованием функций API,  программу, которая выводит в окно приложения информацию, получаемую из контекста,  об устройстве  и метрике:

Информация о метрике:  ширина и высота экрана в точках, ширина и высота горизонтальной полосы прокрутки, ширина и высота рамки окна приложения.

Информация об устройстве: ширину поля вывода в миллиметрах.

Информация о шрифте: величина пространства над символом для специальный знаков.

Написать программу, рисующую четыре прямоугольника в клиентской области окна, которые делят его на четыре равные части. При изменении размеров окна, следует перерисовать прямоугольники, вычислив их новые размеры.

Листинг:

#include <windows.h>    

#include "resource.h"

HINSTANCE hInst;  // Указатель приложения

LPCTSTR szWindowClass = "QWERTY";

LPCTSTR szTitle = "Вторая программа";

// Предварительное описание функций

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,

                    HINSTANCE hPrevInstance,

                    LPSTR     lpCmdLine,

                    int       nCmdShow)

{

MSG msg;

 

MyRegisterClass(hInstance);

if (!InitInstance (hInstance, nCmdShow))

{

 return FALSE;

}

// Цикл обработки сообщений

while (GetMessage(&msg, NULL, 0, 0))

{

  TranslateMessage(&msg);

  DispatchMessage(&msg);

}

return msg.wParam;

}

//  FUNCTION: MyRegisterClass()

//  Регистрирует класс окна 

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style   = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc =(WNDPROC)WndProc; wcex.cbClsExtra  = 0;      

wcex.cbWndExtra  = 0;

wcex.hInstance  = hInstance;

wcex.hIcon   = LoadIcon(NULL, IDI_HAND); wcex.hCursor  = LoadCursor(NULL, IDC_ARROW; wcex.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);   

wcex.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);

wcex.lpszClassName = szWindowClass;

wcex.hIconSm  = NULL;

return RegisterClassEx(&wcex); // регистрация класса окна

}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

  HWND hWnd;

  hInst = hInstance; // сохраняет указатель приложения в переменной hInst

  hWnd=CreateWindow(szWindowClass, // имя класса окна

szTitle,   // имя приложения

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

 CW_USEDEFAULT, // положение по Х

CW_USEDEFAULT,  // положение по Y

800,    // размер по Х

600,    // размер по Y

NULL, // описатель родительского окна

NULL,       // описатель меню окна

hInstance,  // указатель приложения

NULL);     // параметры создания.

  if (!hWnd) // Если окно не создалось, функция возвращает FALSE

  {

     return FALSE;

  }

  ShowWindow(hWnd, nCmdShow);  // Показать окно

  UpdateWindow(hWnd);   // Обновить окно

  return TRUE;    //Успешное завершение функции

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

PAINTSTRUCT ps;

HDC hdc;

RECT rt;

char text[5][50];

int mas[7];

mas[0] = GetSystemMetrics(SM_CXSCREEN);

mas[1] = GetSystemMetrics(SM_CYSCREEN);

mas[2] = GetSystemMetrics(SM_CYHSCROLL);

wsprintf(text[0], "Размер экрана : %d x %d", mas[0], mas[1]);

 wsprintf(text[1], "Ширина горизонтальной прокрутки окна: %d", mas[2]);

switch (message)

{

 case WM_CREATE: // Сообщение приходит при создании окна

  break;

 case WM_PAINT:  // Перерисовать окно

  hdc = BeginPaint(hWnd, &ps);

                                              GetClientRect(hWnd, &rt);

  TEXTMETRIC tm;

  GetTextMetrics(hdc,&tm);

  Rectangle(hdc, 0, 0, rt.right/2, rt.bottom/2);

  Rectangle(hdc, rt.right/2, 0, rt.right, rt.bottom/2);

  Rectangle(hdc, 0, rt.bottom/2, rt.right/2, rt.bottom);

  Rectangle(hdc, rt.right/2, rt.bottom/2, rt.right, rt.bottom);

  mas[3] = tm.tmInternalLeading;

  wsprintf(text[2], "Информация про шрифт: %d", mas[3]);

  mas[4] = rt.bottom;

  mas[5] = rt.right;

  wsprintf(text[3], "Размер окна : %d x %d", mas[4], mas[5]);

  mas[6] = GetDeviceCaps(hdc, HORZSIZE);

  wsprintf(text[4], "Размер окна : %d мм", mas[6]);

  TextOut(hdc, rt.right/20, rt.bottom/20, (LPCTSTR) text[0], strlen(text[0]));

  TextOut(hdc, rt.right/20, rt.bottom/10, (LPCTSTR) text[3], strlen(text[3]));

  TextOut(hdc, rt.right/20, rt.bottom/6.5, (LPCTSTR) text[1], strlen(text[1]));

  TextOut(hdc, rt.right/20, rt.bottom/5, (LPCTSTR) text[2], strlen(text[2]));

  TextOut(hdc, rt.right/20, rt.bottom/4, (LPCTSTR) text[4], strlen(text[4]));

  

  EndPaint(hWnd, &ps); // Закончить графический вывод

  break;

 case WM_COMMAND:

  if(LOWORD(wParam) == IDR_MENU1)

              MessageBox(NULL, "Эту программу написали два реальных мужика!:)", "Информация о создателях программы", MB_OK);

  break;

 case WM_DESTROY: // Завершение работы

   PostQuitMessage(0);

  break;

 default:

  return DefWindowProc(hWnd, message, wParam, lParam);

  }

return 0;

}

Результат:

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


 

А также другие работы, которые могут Вас заинтересовать

11089. Аварии с выбросом (угрозой выброса) радиоактивных веществ 183.84 KB
  Аварии с выбросом угрозой выброса радиоактивных веществ Внимание Радиация не имеет запаха цвета вкуса. Радиационноопасный объект РОО объект на котором хранят перерабатывают используют или транспортируют радиоактивные вещества при аварии на котором или его р...
11090. Аварии с выбросом (угрозой выброса) биологических опасных веществ. Гидродинамические аварии. Аварии на коммунальных системах жизнеобеспечения 109.62 KB
  Аварии с выбросом угрозой выброса биологических опасных веществ. Гидродинамические аварии. Аварии на коммунальных системах жизнеобеспечения. Аварии с выбросом биологических опасных веществ Предприятия использующие в производственных процессах различные веществ
11091. Чрезвычайные ситуации экологического характера 192.24 KB
  Чрезвычайные ситуации экологического характера Нарушение экологического равновесия Экология это наука о взаимоотношениях живых организмов между собой и с окружающей средой. Все элементы живой и неживой природы влияют на состояние и жизнедеятельность друг друг...
11092. Чрезвычайные ситуации военного характера, источники их возникновения 41.26 KB
  Чрезвычайные ситуации военного характера источники их возникновения Особенности ЧС военного времени Нам представляется что ЧС военного характера военные столкновения это особая группа конфликтных и экологических ЧС возникших на определенной территории вызван...
11093. Действия населения при авариях катастрофах и стихийных бедствиях 26.35 KB
  Действия населения при авариях катастрофах и стихийных бедствиях. Введение. Стихийные действия сил природы пока еще не в полной мере подвластные человеку наносят экономике государства и населению огромный ущерб. Стихийные бедствия это такие явления природы кото
11094. Средства защиты органов дыхания (противогазы, респираторы). Защитные сооружения, их классификация 48.51 KB
  Средства защиты органов дыхания противогазы респираторы. Защитные сооружения их классификация Средства Индивидуальной Защиты Органов Дыхания СИЗОД К СИЗОД относят противогазы респираторы изолирующие дыхательные аппараты комплект дополнительного патрона...
11095. Военная доктрина РФ. Организационная структура ВС РФ, рода войск и их предназначения 19.3 KB
  Военная доктрина РФ. Организационная структура ВС РФ рода войск и их предназначения. Военная доктрина Российской Федерации Утверждение военной доктрины Российской Федерации находится в компетенции Верховного Главнокомандующего Вооружёнными Силами Российской Фе...
11096. Организация воинского учета призывников, прохождение воинской службы по призыву и по контракту. Альтернативная служба 47.46 KB
  Организация воинского учета призывников прохождение воинской службы по призыву и по контракту. Альтернативная служба Воинский учет Воинский учет это составная часть воинской обязанности граждан. Воинскому учету подлежат все граждане мужского пола достигшие пр
11097. Общевоинские уставы ВС РФ, закон воинской службы. Воинские звания военнослужащих воинских частей 19.21 KB
  Общевоинские уставы ВС РФ закон воинской службы. Воинские звания военнослужащих воинских частей Общевоинские уставы ВС РФ Дисциплинарный устав Вооруженных Сил Российской Федерации Настоящий Устав определяет сущность воинской дисциплины обязанности военнослу