69992

ДОЧЕРНИЕ ОКНА УПРАВЛЕНИЯ

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

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

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

Русский

2014-10-13

78 KB

2 чел.

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

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

Кафедра ЭВМ

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

Тема: «ДОЧЕРНИЕ ОКНА УПРАВЛЕНИЯ»

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

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

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

2009

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

Тема: «ДОЧЕРНИЕ ОКНА УПРАВЛЕНИЯ»

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

Задание:

Вариант 6

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

Листинг:

#include <windows.h>

#define ID_FIRSTCHILD 100

#define ID_SECONDCHILD 101

#define ID_THIRDCHILD 102

// Глобальные переменные:

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

LPCTSTR szWindowClass = "Kravets";

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;

}

//Регистрация класса

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_APPLICATION);  // опре-деление иконки

wcex.hCursor  = LoadCursor(NULL, IDC_ARROW);    // опреде-ление курсора

wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);   // ус-тановка фона

wcex.lpszMenuName = NULL;  // определение меню

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 | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, // стиль окна

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

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

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

  CW_USEDEFAULT,    // размер по 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;

int i=0;

static int x1, x2, y1, y2, temp = 4;

static POINT mas[10000];

 

HWND hb1, hb2, hb3;

HINSTANCE hInstance;

switch (message)

{

 case WM_CREATE:

  

  hb1 = CreateWindow("button",

  "Линия",

  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,

  30,

  40,  

  70,    

  30,    

  hWnd,

  (HMENU) (int) (ID_FIRSTCHILD),    

  hInstance,  

  NULL);

  hb2 = CreateWindow("button",

  "Прямоуг.",

  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,

  30,

  73,

  70,

  30,

  hWnd,

  (HMENU) (int) (ID_SECONDCHILD),

  hInstance,

  NULL);

   hb3 = CreateWindow("button",

  "Эллипс",

  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,

  30,

  106,

  70,

  30,

  hWnd,

   (HMENU) (int) (ID_THIRDCHILD),

  hInstance,

  NULL);

     break;

 case WM_LBUTTONDOWN:

  x1 = LOWORD(lParam);

  y1 = HIWORD(lParam);

  mas[i].x = x1;

             mas[i].y = y1;

  break;

 case WM_MOUSEMOVE:

  if(wParam & MK_LBUTTON)

  {

   x2 = LOWORD(lParam);

   y2 = HIWORD(lParam);

    mas[i+1].x = x2;

    mas[i+1].y = y2;

    i++;

   InvalidateRect (hWnd, NULL, TRUE) ;

  }

  break;

 case WM_RBUTTONDOWN:

  temp = 3;

  break;

 case WM_COMMAND:

  if(LOWORD(wParam) == ID_FIRSTCHILD)

  temp = 2;

  if(LOWORD(wParam) == ID_SECONDCHILD)

   temp = 0;

  if(LOWORD(wParam) == ID_THIRDCHILD)

   temp = 1;

   break;

 case WM_PAINT:

  hdc = BeginPaint(hWnd, &ps);

   

                                    if(temp == 0)

  {

  GetClientRect(hWnd, &rt); // Область окна для рисования

  Rectangle(hdc, x1, y1, x2, y2);

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

  }

  if(temp == 1)

  {

  GetClientRect(hWnd, &rt); // Область окна для рисования

  Ellipse(hdc, x1, y1, x2, y2);

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

  }

  if(temp == 2)

  {

  GetClientRect(hWnd, &rt); // Область окна для рисования

  MoveToEx(hdc, x1, y1, NULL);

  LineTo(hdc, x2, y2);

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

  }

  if(temp == 3)

  {

   hdc = BeginPaint(hWnd, &ps);

               MoveToEx(hdc,mas[0].x,mas[0].y,NULL);

               for (int j=0; j < i; ++j)

               LineTo(hdc, mas[j].x, mas[j].y);

   EndPaint(hWnd, &ps);

  }

  break;

 case WM_DESTROY:

   PostQuitMessage(0);

   break;

 default:

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

  }

return 0;

}

Результат:

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


 

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

13012. Лабораторні роботи з дисципліни «Основи геоінформатики» 2.26 MB
  Лабораторні роботи з дисципліни Основи геоінформатики ЛАБОРАТОРНА РОБОТА №1 Тема: Просторові та атрибутивні дані Мета роботи: ознайомитися зі структурою даних геоінформаційних систем вивчити характеристики кількох різних структур. Підготовка до роб...
13013. Принципы и особенности построения средств отображения информации, построенные на различных физических принципах 989 KB
  План 1.5.1. Принципы и особенности построения средств отображения информации построенные на различных физических принципах. 1.5.2. Системы отображения информации на базе ЭЛТ. 1.5.1. Принципы и особенности построения средств отображения информации построенные на ра...
13014. Формат сохранения картографической информации и алгоритм работы программы-конвертора 134.5 KB
  В задачах цифровой картографии очень важное значение имеет выбор формата представления информации основы БКД АГК. К географическим базам данных манипулирующим большими массивами информации и принадлежащим системам работающим в режиме реального времени предъявляют...
13015. Алгоритм визуализации картографической информации. Методы формирования картографических срезов 83 KB
  Для получения картографического изображения некоторой прямоугольной области земной поверхности задаваемой географическими координатами на экране устройства отображения предлагается метод суть которого состоит в следующем: Сначала задаются элементы содержания в ...
13016. ОРГАНІЗАЦІЯ ОБЛІКУ ВИТРАТ ТА МЕТОДИКА АНАЛІЗУ СОБІВАРТОСТІ ПОСЛУГ 757 KB
  Метою дипломної роботи є вироблення теоретико-методичних положень щодо формування системи обліку та управління виробничими витратами. А також удосконалення методики калькулювання собівартості, що дасть змогу спростити процедуру обліку операційних витрат виробництва.
13017. Принципы построения баз картографических данных в агротехнических геоинформационных комплексах 425 KB
  План 6.1. Модель графических данных. 6.2. Логическая и физическая организация баз картографических данных 6.1. Модель графических данных Процесс проектирования БГД представляет собой сложный процесс определения отображения: Предметная область Схема вну...
13018. Понятие агротехнических геоинформационных комплексов 195.5 KB
  Введение. Понятие агротехнических геоинформационных комплексов. Данный курс лекций является обобщением результатов исследований и разработок проведённых под руководством автора и относится к области построения интерактивных геоинформационных комплексов опер...
13019. Исследованию по факту пожара в МБОУ «Майминская СОШ №2» 780.09 KB
  Анализ особенностей осмотра места происшествия связанного с пожаром, изучение и анализ документов, составляемых в связи с пожарами – заключения технического специалиста, постановления об отказе в возбуждении уголовного дела, исследование практики в этой области.
13020. Проектирование АГК как сложной человеко-машинной системы 185.5 KB
  Проектирование АГК как сложной человекомашинной системы. Системный подход В.М.Глушкова является достаточно хорошей основой для создания компонентов АГК работающих в статике. Однако основной чертой таких комплексов является их работа в динамике. Они должны успевать...