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


 

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

72016. Узагальнення і систематизація знань з теми «Натуральні числа 1 – 10 і число 0» 37.5 KB
  Закріпити узагальнити і систематизувати вивчений матеріал; перевірити знання учнями чисел першого десятка і удосконалювати вміння та навички додавання і віднімати у межах 10 розвязувати задачі і удосконалювати навички письма вивчених цифр...
72017. Число і цифра 8. Урок-подорож до Країни Чисел і Цифр 45 KB
  Мета: ознайомити дітей з числом 8, його утворенням і записом, вчити групувати предмети, сприймати число 8; закріплювати нумерацію чисел у межах 8; вміння розрізняти цифри і числа; сприяти розвитку логічного мовлення, уваги та уяви, виховувати інтерес до цікавої математики.
72018. Повторення складу числа 10. Складання прикладів за малюнками предметів та монет. Розпізнавання геометричних фігур 29 KB
  Будемо допомагати героям виконувати різні завдання. Діти отже послухайте які ж завдання нашого уроку: сьогодні ми повторимо склад числа 10; формуватимемо навички складати й розв’язувати приклади на додавання за малюнками предметів та монет; розпізнаватимем геометричні фігури...
72019. Цикл нестандартних уроків з використанням мультімедійних технологій. Математика, 1 клас 240.5 KB
  Робота вчителя початкових класів дуже складна та відповідальна, і складність її полягає у тому, що необхідно викликати в учнів інтерес до знань, не згасити цей вогник допитливості, навчити кожного з них вчитися, запевнити у своїх силах.
72020. ВПРАВИ ЗАДАЧІ І НА ЗАСВОЄННЯ ТАБЛИЦЬ ДОДДВАННЯ І ВІДНІМАННЯ ЧИСЛА 3. РОЗ’ЯЗУВАННЯ ЗАДАЧ НА ЗНАХОДЖЕННЯ СУМИ. ВИМІРЮВАННЯ ДОВЖИНИ ВІДРІЗКА 49 KB
  Подивіться на малюнок які пташки першими прилетіли до годівнички Синиці Скільки їх А які ще птахи прилетіли Снігурі Скільки їх Нам потрібно знайти скільки всього пташок стало Якою дією ми можемо дізнатися скільки всього пташок прилетіло до годівнички...
72022. Языком математики о природе и здоровье. Решение примеров на сложение и вычитание в пределах 10 29.5 KB
  Цели: Упражняться в решении примеров и задач; развивать речь и гибкость ума; закреплять знания о живой природе о значении растений в жизни человека об их лечебных свойствах; о птицах о пользе воспитывать любовь к математике. Оборудование: Карточки с решением примеров...
72023. Складання таблиці додавання і віднімання числа 4. Розв’язування задач на знаходження суми й різниці (1 клас) 32.5 KB
  Мета: Розкрити принципи укладання таблиць додавання і віднімання числа 4. Формувати вміння додавати число частинами порівнювати значення виразів з даними числами. Формувати знання таблиць додавання і віднімання числа 4.
72024. Упражнение на применение способов сложения и вычитание чисел частям. Задачи на разностное сравнение чисел 94 KB
  Цель урока. Повторить и закрепить умения учащихся прибавлять и отнимать частями с переходом через десяток; формировать навыки решения задач; Развивать умение определять геометрические фигуры; развивать логическое мышление, связную речь, воспитывать навыки самоконтроля, чувства товарищества.