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


 

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

77575. РЕФЛЕКСИЯ И ЕЁ ВИДЫ 76 KB
  Её цель не просто уйти с урока с зафиксированным результатом а выстроить смысловую цепочку сравнить способы и методы применяемые другими со своими. Рефлексия может осуществляться не только в конце урока как это принято считать но и на любом его этапе.
77577. Реформаторы мировой индустрии гостеприимства 17.94 KB
  Конрад Хилтон – в 1919 купил отель стоявший без дела и превращает его в наст гостиницу в 1925 открыл первый Хилтон отель. В 1949 – первый Хилтон отель за рубежом. Сегодня отели Хилтон есть почти во всех странах.
77578. Реформи Марії-Терезії та Йосипа ІІ 39.5 KB
  У ці десятиліття були проведені реформи що торкнулися чи не всі сфери матеріального і духовного життя суспільства: аграрні відносини ремесло торгівлю промисловість церкву школу. Її реформи представляли собою помірний варіант політики освіченого абсолютизму.
77579. Реформирование государственно-политической системы, начавшееся с 1991 года 27 KB
  17 марта 1991 года в 9 республиках прошёл референдум о судьбе СССР три четверти голосовавших высказались за его сохранение. 23 апреля 1991 года представители 9 республик и Горбачёв как Президент СССР подписали соглашение о заключении нового союзного договора.