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


 

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

30723. Эволюция и крах бюрократических режимов в стране ЦЮВЕ 26.5 KB
  было сформировано коалиционное правительство в ГДР. Чехословакия и ГДР несколько условно могут быть отнесены к государствам с довольно высоким уровнем развития Польша Венгрия Хорватия и Словения – страны среднего развития а Болгария Румыния четыре другие республики бывшей Югославии Сербия Черногория Македония Босния и Герцеговина Албания – низкого. По решению парламентов ГДР и ФРГ с 1 июля 1990 г. ГДР прекратила свое существование вместо нее появились пять новых федеральных земель ФРГ.
30724. Изоляционизм США термин использовавшийся с середины 19 в. 25 KB
  Изоляционизм США термин использовавшийся с середины 19 в. для обозначения направления во внешней политике США в основе которого лежит идея невмешательства в европейские дела и вообще в вооруженные конфликты вне американского континента. складывались под влиянием ряда факторов: географическая обособленность Американского континента создание в США ёмкого внутреннего рынка способствовавшего тому что значительная часть буржуазии мало интересовалась заокеанской экспансией расширение за счет др.
30725. Великобритания выбор новой модели развития в условиях кризиса и распада колониальной империи 28.5 KB
  Черчилль предложил емкую формулировку такого мировидения концепцию трех великих кругов центром пересечения которых считалась Британия. Чем глубже пускала корни биполярная система мира тем активнее Британия искала себе место в условиях противостояния двух сверхдержав. в 1940–1950е годы Британия все еще ощущала себя империей однородным государством и державой глобального масштаба.
30726. Ялтинская и Потсдамская конференции глав правительств СССР, США и Великобритании. (1945) 22.5 KB
  Участвовали: Сталин СССР Черчилль Великобритания Рузвельт США. Основные решения: 1 Германия делилась на 4 оккупационные зоны СССР Франция Англия США. 3 Согласия СССР вступить в войну с Японией через 3 месяца после капитуляции Германии.
30727. Кризис неолиберализма в США. Переход к неконсервативной модели развития ГМК 26 KB
  Главный замысел неолиберализма – снижение регулирующей роли государства в экономике При общем экономическом подъеме неолиберальный курс обусловил неустойчивость и нестабильность развития США Причиной экономического роста в США стали специфические внутренние и внешние факторы конца ХХ в. Экономическое развитие США последнего десятилетия окончательно подтверждает: неолиберальная перестройка – это путь к строительству эффективной капиталистической экономики. Неолиберальный режим вызвал крайне нестабильный экономический рост в США в 90е...
30728. Политика «невмешательства» (1935 – 1937 гг.). Мюнхенское соглашение 1938 г. и его значение для судеб мира 24.5 KB
  СССР готово было прийти на помощь Чехословакии в 1935 г у СССР и Чехословакии был договор о взаимопомощи при поддержке Франции у которой с СССР был такой же договор. Но французское правительство не поддержало СССР т. Попытки англофранцузской дипломатии умиротворить нацистов без участи СССР оказались тщетными и тогда Англия и Франция вынуждены были предоставить гарантии безопасности возможным жертвам агрессии – Польше Румынии Греции и начали секретные переговоры с Советским союзом. провалились изза недоверия...
30729. Внутренняя политика британских консерваторов в 1930-е гг 23 KB
  Консерваторы – выдвигали идею отказа от свободной торговли и перехода к политике протекционизма поддержка национальной экономики и защита от иностранных конкурентов требовали активизаций колониальной политики беспомощного подавления национальноосвободительного движения ирландского народа. В период утверждения капитализма на Западе консерваторы противостояли либерализму и социализму они то приходили к власти то теряли ее. Консерваторы же упорно настаивали на своих методах регулирования экономики основываясь на рыночных отношениях и в...
30730. Причины, основные этапы и итоги гражданской войны в Испании (1936 – 1939) 25.5 KB
  в Испании на всеобщих выборах побеждают левые силы – партия Народный фронт республиканцы коммунисты которые возобновили аграрную реформу амнистируют политических заключенных поощряют требования забастовщиков снижение налогов и т. испанские войска в Марокко колония Испании под командованием генерала Франко против республики Народного Фронта. мятеж с колонии перекидывается на территорию Испании Франко поддерживают сухопутные войска.
30731. Причины и характер второй мировой войны. (1 сентября 1939 — 2 сентября 1945) 23 KB
  Возникли два очага войны – на Дальнем Востоке и в Европе. Главной причиной войны было стремление агрессивных государств – Германии Италии и Японии осуществить передел мира ликвидировать демократические режимы захватить колонии в Азии и Африке – т. Итоги войны: катастрофическая масштабная продолжительная разрушительная и кровопролитная.