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


 

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

18070. РОЗРОБКА ТА ВПРОВАДЖЕННЯ СОЛОДКИХ СОУСІВ В ЗАКЛАДАХ РЕСТОРАННОГО ГОСПОДАРСТВА 483.5 KB
  Охарактеризувати в загальному солодкі соуси, їх асортимент та технології приготування солодких соусів; проаналізувати властивості сировини, яка входить до складу солодких соусів; проаналізувати технології приготування солодких соусів; розробити технології виробництва солодких соусів; проаналізувати використання біологічно активних речовин при приготуванні солодких соусів...
18071. Иследовать частотные характеристики последовательного колебательного контура 32.5 KB
  Цель работы: Иследовать частотные характеристики последовательного колебательного контура Содержание отчета. 2.1 Экспериментальное определение амплитудночастотной и фазочастотной характеристик цепи Схема исследуемой электрической цепи Параметры элементов...
18072. Исследовать частотные характеристики параллельного колебательного контура 60.5 KB
  Цель работы: Исследовать частотные характеристики параллельного колебательного контура Содержание отчета. 2.1 Экспериментальное определение амплитудночастотной и фазочастотной характеристик цепи Схема исследуемой электрической цепи: Параметры элементов цеп...
18073. АНТЕНИ РТС ПЕРЕДАЧІ ІНФОРМАЦІЇ 389 KB
  Основні принципи навчання: науковість, послідовність, систематичність, практична спрямованість, активність студентів, диференціальний підхід, що врахований в тематиці дисциплін, формах та методах проведення занять.
18074. Екологічна оцінка технологічного процесу обробки граніту на виробничому підприємстві «Укр-Інтер-Граніт» 712 KB
  Підприємство займається обробкою та реалізацією виробів з граніту. Головними технологічними процесами є розпилювання блоків граніту, переробка їх на вироби за кресленнями замовника, включаючи процеси шліфування і полірування.
18075. АНТЕНИ СИСТЕМ СУПУТНИКОВОГО РАДІОЗВ’ЯЗКУ 1.3 MB
  ЛЕКЦІЯ №2 з навчальної дисципліни ПРИКЛАДНІ ПИТАННЯ АНТЕННИХ ПРИСТРОЇВ ТЕМА 1: АНТЕНИ РТС ПЕРЕДАЧІ ІНФОРМАЦІЇ. ЗАНЯТТЯ 2: антенИ систем супутникового радіозв’язку 1. НАВЧАЛЬНІ ПИТАННЯ Вимоги до антен системи супутникового ра
18076. АНТЕНИ РАДІОРЕЛЕЙНИХ ЛІНІЙ 284 KB
  ЛЕКЦІЯ №3 з навчальної дисципліни ПРИКЛАДНІ ПИТАННЯ АНТЕННИХ ПРИСТРОЇВ ТЕМА 1: АНТЕНИ РТС ПЕРЕДАЧІ ІНФОРМАЦІЇ. ЗАНЯТТЯ 4: антенИ радіоРЕЛЕЙНИХ ЛІНІЙ 1. НАВЧАЛЬНІ ПИТАННЯ Вимоги до антен радіорелейних ліній. 2. Особли
18077. АНТЕНИ СИСТЕМ КОРОТКОХВИЛЬОВОГО ЗВ’ЯЗКУ ТА РАДІОМОВЛЕННЯ 258.5 KB
  ЛЕКЦІЯ №4 з навчальної дисципліни ПРИКЛАДНІ ПИТАННЯ АНТЕННИХ ПРИСТРОЇВ ТЕМА 1: АНТЕНИ РТС ПЕРЕДАЧІ ІНФОРМАЦІЇ. ЗАНЯТТЯ 5: антенИ систем короткохвильового зв’язку та радіомовлення. 1. НАВЧАЛЬНІ ПИТАННЯ Вимоги до антен коротк...
18078. ЧАСТОТНО НЕЗАЛЕЖНІ АНТЕНИ 365.5 KB
  ЛЕКЦІЯ №5 з навчальної дисципліни ПРИКЛАДНІ ПИТАННЯ АНТЕННИХ ПРИСТРОЇВ ТЕМА 2: Частотні властивості антен. ЗАНЯТТЯ 1: Частотно незалежні антени 1. НАВЧАЛЬНІ ПИТАННЯ Принцип створення частотно незалежних антен. 2. Пр