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


 

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

13245. Характеристики операційного підсилювача 209 KB
  Лабораторна робота №7 Тема: Характеристики операційного підсилювача Мета: 1. Вимірювання вхідних струмів операційного підсилювача ОП. Оцінка величин середнього вхідного струму і різниці вхідних струмів ОП. Вимірювання напруги зміщення ОП Вимірювання ...
13246. Дослідження операційного підсилювача із зворотними звязками 1.41 MB
  Дослідження амплітудних і частотних властивостей операційного підсилювача. Вивчення впливу негативного зворотного звязку на характеристики операційного підсилювача Вимірювання напруги зміщення ОП.
13247. Неінвертуюче та інвертуюче ввімкнення операційного підсилювача 194 KB
  Лабораторна робота №9 Тема: Неінвертуюче та інвертуюче ввімкнення операційного підсилювача. Мета: 1. Вимірювання коефіцієнта підсилення схем неінвертуючого та інвертуючого ввімкнення операційного підсилювача. Визначення різниці фаз між вихідною і вхідною ...
13248. Сумування напруг у схемах на ОП 213 KB
  Лабораторна робота №10 Тема: Сумування напруг у схемах на ОП Мета: 1. Аналіз роботи схеми суматора на ОП. Дослідження сумування двох постійних вхідних напруг. Дослідження сумування постійної і змінної вхідної напруги. Дослідження сумування двох змінних
13249. Вивчення резонансу в електричному колі змінного струму 870.5 KB
  Лабораторна робота № 10 Тема: Вивчення резонансу в електричному колі змінного струму. Мета: виявити явище резонансу в електричному колі шляхом дослідження залежності сили струму в ньому від частоти змінної напруги; дослідити вплив активного опору на форму резонансн
13250. Визначення розмірів плати за забруднення ґрунтів 55 KB
  Лабораторна робота № Тема: Визначення розмірів плати за забруднення ґрунтів Теоретична частина Ґрунт це самостійне природне тіло яке утворилося з поверхневих шарів гірських порід під сукупним впливом тварин рослин мікроорганізмів клімату води рельєфу місц...
13251. Розрахунок санітарно-захисної зони для джерела електромагнітного випромінювання 45 KB
  Лабораторна робота № Розрахунок санітарнозахисної зони для джерела електромагнітного випромінювання Теоретичні відомості Основними джерелами електромагнітних полів ЕМП є: атмосферна електрика радіовипромінювання електричне та магнітне поля Землі потуж
13252. Оцінка рівня радіаційного фону 56.5 KB
  Лабораторна робота № Тема: Оцінка рівня радіаційного фону Теоретична частина Випромінювання з високою енергією здатні віднімати електрони від атомів і приєднувати їх до інших атомів з утворенням пар позитивних і негативних іонів називається іонізуючим випромі
13253. Визначення концентрації оксиду вуглецю (СО) в атмосферному повітрі 142 KB
  Лабораторна робота № Тема: Визначення концентрації оксиду вуглецю СО в атмосферному повітрі Теоретична частина Автомобільний транспорт є однією з галузей що у значній мірі визначає розвиток промисловості і сільського господарства будьякої країни. Тому світов