69997

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

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

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

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

Русский

2014-10-13

65.5 KB

4 чел.

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

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

Кафедра ЭВМ

Лабораторная работа №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-приложений, организацией взаимодействия программ с ОС, получил практические навыки по составлению, написанию и отладке простых программ. Ознакомился с ресурсами как средством создания визуального интерфейса и задания параметров и характеристик программного приложения.


 

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

38857. ФИЗИЧЕСКАЯ РЕАБИЛИТАЦИЯ ДЕТЕЙ С ДЦП С ИСПОЛЬЗОВАНИЕМ ТРЕНАЖЁРА ГРОССА 521.5 KB
  3 Методы и методические приемы используемые в комплексной физической реабилитации детей с ДЦП.4 Использование тренажерных устройств в физической реабилитации детей с ДЦП21 Заключение. Развитие двигательной активности детей.
38860. Особенности и проблемы разделения властей в Российской Федерации 286 KB
  Сегодня исключительно важное значение приобретают новые требования к государственной власти и прежде всего преодоление ее монопольного характера смягчение жесткости. Мировой опыт убедительно подтверждает что важнейшим условием успешного функционирования государственной власти является принцип разделения властей. Каждая из названных ветвей власти самостоятельна и выполняет свои функции посредством особой системы органов и в специфических правовых формах. Основное назначение такого разделения властей заключается вопервых в обеспечении...
38863. Влияние протравителя, систем обработки почвы и видов пара в севооборотах на пораженность зерновых культур болезнями 1014.5 KB
  Экологические требования к основной обработке почвы. В связи с этим целью научных исследований явилось изучение эффективности протравителя систем обработки почвы и видов пара в севооборотах в защите озимой ржи и яровой пшеницы от болезней вызываемых почвенными патогенами. Определить влияние протравителя систем обработки почвы и видов пара в севооборотах на урожайность и элементы ее структуры; 3. Наибольшие урожаи зерна получают на черноземах малопригодны заболоченные и тяжелые глинистые почвы Посыпанов Г.
38864. Гипсовые пазогребневые плиты 81.5 KB
  Плиты из неводостойкого гипсового вяжущего предназначены для устройства перегородок в зданиях различного назначения с сухим и нормальным режимом помещений по СНиП П379 а плиты из водостойких гипсовых вяжущих и с влажным режимом помещений. Плиты относятся к группе трудносгораемых материалов.