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


 

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

44890. Новое время. Европа в начале нового времени 14.19 KB
  Новое время неразрывно связывается с утверждением €œбуржуазным индустриальным прогрессомâ€. В последнее время многие историки склоняются к мнению что нельзя искусственно отрывать от буржуазной цивилизации такие явления как великие географические открытия реформация и гуманизм научная революция которые дали толчок к зарождению буржуазии.: ранее новое время когда капитализм только зарождался и существовал в виде одного из укладов жизни.
44891. Методика формирования и развития системы понятий о химическом элементе 23.19 KB
  Цель изучения химических производств показать учащимся как достижения науки используются для практических нужд отразить роль науки как движущей силы производства и прогресса. Изучение химических производств позволяет существенно усилить экологическую сторону обучения химии раскрыть возможность реализации и требований экологической безопасности при грамотной организации производства что является важной воспитательной задачей курса химии средней школы. Структура системы понятий об основах химического производства. На этом основании можно...
44893. Понятие ОМ. Общественное мнение и паблицитный капитал как результаты PR-деятельности 20.26 KB
  Общественное мнение и паблицитный капитал как результаты PRдеятельности Общественное мнение –- это специфическое проявление общественного сознания выражающееся в оценках как в устной так и в письменной форме и характеризующее явное отношение групп общественности к актуальным проблемам действительности представляющим общественный интерес. Для PRдеятельности Общественное мнение его преобразование изменение в нужном для субъекта PR направлении – это объект и продукт PRдеятельности. Программы деятельности субъектов PR...
44894. Travelling. Путешествие 15.03 KB
  It is аlwys interesting to discover new things different wys of life to meet different people to try different food to listen to different musicl rhythms. Most trvellers nd holidymkers tke cmer with them nd tke pictures of everything tht interests them the sights of city old churches nd cstles views of mountins lkes vlleys plins wterflls forests different kinds of trees flowers nd plnts nimls nd birds.
44895. Трудная жизненная ситуация как категория социальной работы 23 KB
  Устоявшиеся нормативные стандарт трудныепротиворесчивые Признаки ТЖС:1 Неадекватность алгоритм. ЧеловекаТЖС ситуация соц.Факторы ТЖС: поведенческий экзистенциональный вероятностнопрогностическийСтруктура ТЖС:участники связан. Классификация ТЖС: по харкам субъектаиндивидуал.
44896. Синтаксические нормы 15.33 KB
  Благодаря преступной халатности водителя произошла эта авария Выбор падежной формы при гл. Выбор предлога. Выбор падежа при глаголе с отрицанием.
44897. Поняття культури мови. Комунікативні якості культури мови 25.5 KB
  Поняття культури мови. Комунікативні якості культури мови. Культура мови ознака літературної мови параметр за яким встановлюються авторитетні загальновизнані стандарти реалізовані в нормах писемного й усного спілкування. З культурою мови насамперед пов'язують уміння правильно говорити й писати дотримуватися всіх норм літературної мови.