69994

МНОГООКОННЫЙ ИНТЕРФЕЙС

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

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

Цель: Ознакомление с технологией создания многооконного интерфейса (Multiple Document Interface, MDI), получение практических навыков по составлению, написанию и отладке программ, позволяющих работать с несколькими документами (форматированными файлами) в одном приложении.

Русский

2014-10-13

82 KB

22 чел.

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

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

Кафедра ЭВМ

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

Тема: «МНОГООКОННЫЙ ИНТЕРФЕЙС»

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

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

Кравец Артём Валерьевич                                            Остроушко А. П.

2009

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

Цель: Ознакомление с технологией создания многооконного интерфейса (Multiple Document Interface, MDI), получение практических навыков по составлению, написанию и отладке программ, позволяющих работать с несколькими документами (форматированными файлами) в одном приложении.

Задание:

Вариант 6

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

Листинг:

#include "stdafx.h"

#include "resource.h"

#define INIT_MENU_POS    0

#define HELLO_MENU_POS   2

#define IDM_FIRSTCHILD   50000

LRESULT CALLBACK FrameWndProc  (HWND, UINT, WPARAM, LPARAM) ;

LRESULT CALLBACK HelloWndProc  (HWND, UINT, WPARAM, LPARAM) ;

BOOL    CALLBACK CloseEnumProc (HWND, LPARAM) ;

HDC             hdc, meta ;

bool flag = true;

TCHAR     szAppName[]    = TEXT ("MDI") ;

TCHAR     szFrameClass[] = TEXT ("MdiFrame") ;

TCHAR     szHelloClass[] = TEXT ("MdiDocument") ;

HINSTANCE hInst ;

HMENU     hMenuInit, hMenuHello ;

HMENU     hMenuInitWindow, hMenuHelloWindow ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

    PSTR szCmdLine, int iCmdShow)

{

HACCEL   hAccel ;

HWND     hwndFrame, hwndClient ;

MSG      msg ;

WNDCLASS wndclass ;

hInst = hInstance ;

 // Register the frame window class

wndclass.style         = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc   = FrameWndProc ;

wndclass.cbClsExtra    = 0 ;

wndclass.cbWndExtra    = 0 ;

wndclass.hInstance     = hInstance ;

wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE + 1) ;

wndclass.lpszMenuName  = NULL ;

wndclass.lpszClassName = szFrameClass ;

 if (!RegisterClass (&wndclass))

{

 MessageBox (NULL, TEXT ("This program requires Windows NT!"),

  szAppName, MB_ICONERROR) ;

 return 0 ;

}

 // Register the Hello child window class

wndclass.style         = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc   = HelloWndProc ;

wndclass.cbClsExtra    = 0 ;

wndclass.cbWndExtra    = sizeof (HANDLE) ;

wndclass.hInstance     = hInstance ;

wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName  = NULL ;

wndclass.lpszClassName = szHelloClass ;

RegisterClass (&wndclass) ;

 // Obtain handles to three possible menus & submenus

hMenuInit  = LoadMenu (hInstance, TEXT ("MdiMenuInit")) ;

hMenuHello = LoadMenu (hInstance, TEXT ("MdiMenuDraw")) ;

hMenuInitWindow  = GetSubMenu (hMenuInit,   INIT_MENU_POS) ;

hMenuHelloWindow = GetSubMenu (hMenuHello, HELLO_MENU_POS) ;

 // Load accelerator table

hAccel = LoadAccelerators (hInstance, szAppName) ;

 // Create the frame window

hwndFrame = CreateWindow (szFrameClass, TEXT ("Лабораторная №6 - MDI"),

 WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,

 CW_USEDEFAULT, CW_USEDEFAULT,

 CW_USEDEFAULT, CW_USEDEFAULT,

 NULL, hMenuInit, hInstance, NULL) ;

hwndClient = GetWindow (hwndFrame, GW_CHILD) ;

ShowWindow (hwndFrame, iCmdShow) ;

UpdateWindow (hwndFrame) ;

 // Enter the modified message loop

 while (GetMessage (&msg, NULL, 0, 0))

{

 if (!TranslateMDISysAccel (hwndClient, &msg) &&

  !TranslateAccelerator (hwndFrame, hAccel, &msg))

 {

  TranslateMessage (&msg) ;

  DispatchMessage (&msg) ;

 }

}

 // Clean up by deleting unattached menus

DestroyMenu (hMenuHello) ;    

 return msg.wParam ;

}

LRESULT CALLBACK FrameWndProc (HWND hwnd, UINT message,

         WPARAM wParam, LPARAM lParam)

{

 static HWND        hwndClient ;

HWND               hwndChild ;

CLIENTCREATESTRUCT clientcreate ;

MDICREATESTRUCT    mdicreate ;

 switch (message)

{

 case WM_CREATE:           // Create the client window

 clientcreate.hWindowMenu  = hMenuInitWindow ;

 clientcreate.idFirstChild = IDM_FIRSTCHILD ;

 hwndClient = CreateWindow (TEXT ("MDICLIENT"), NULL,

  WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,   

  0, 0, 0, 0, hwnd, (HMENU) 1, hInst,

  (PSTR) &clientcreate) ;

 return 0 ;

 case WM_COMMAND:

 switch (LOWORD (wParam))

 {

  case IDM_FILE_NEWDOCUMENT:       // Create a Hello child window       

   mdicreate.szClass = szHelloClass ;

   mdicreate.szTitle = TEXT ("Новый документ") ;

   mdicreate.hOwner  = hInst ;

   mdicreate.x       = CW_USEDEFAULT ;

   mdicreate.y       = CW_USEDEFAULT ;

   mdicreate.cx      = CW_USEDEFAULT ;

   mdicreate.cy      = CW_USEDEFAULT ;

   mdicreate.style   = 0 ;

   mdicreate.lParam  = 0 ;

  hwndChild = (HWND) SendMessage (hwndClient,

   WM_MDICREATE, 0,(LPARAM) (LPMDICREATESTRUCT) &mdicreate) ;

  return 0 ;

  case IDM_FILE_CLOSE:          // Close the active window

   hwndChild = (HWND) SendMessage (hwndClient,WM_MDIGETACTIVE, 0, 0) ;

   if (SendMessage (hwndChild, WM_QUERYENDSESSION, 0, 0))

    SendMessage (hwndClient, WM_MDIDESTROY,

    (WPARAM) hwndChild, 0) ;

   return 0 ;

  case IDM_APP_EXIT:            // Exit the program    

   SendMessage (hwnd, WM_CLOSE, 0, 0) ;

   return 0 ;

  case IDM_WINDOW_CLOSEALL:     // Attempt to close all children

   EnumChildWindows (hwndClient, CloseEnumProc, 0) ;

   return 0 ;

  default:             // Pass to active child...

   hwndChild = (HWND) SendMessage (hwndClient,WM_MDIGETACTIVE, 0, 0) ;

   if (IsWindow (hwndChild))

    SendMessage (hwndChild, WM_COMMAND, wParam, lParam) ;

   break ;      

  }

  break ;

 case WM_QUERYENDSESSION:

 case WM_CLOSE:                      

 SendMessage (hwnd, WM_COMMAND, IDM_WINDOW_CLOSEALL, 0) ;

 if (NULL != GetWindow (hwndClient, GW_CHILD))

  return 0 ;

 break ;

 case WM_DESTROY:

 PostQuitMessage (0) ;

 return 0 ;

}

 return DefFrameProc (hwnd, hwndClient, message, wParam, lParam) ;

}

BOOL CALLBACK CloseEnumProc (HWND hwnd, LPARAM lParam)

{

 if (GetWindow (hwnd, GW_OWNER))         // Check for icon title

 return TRUE ;

SendMessage (GetParent (hwnd), WM_MDIRESTORE, (WPARAM) hwnd, 0) ;

 if (!SendMessage (hwnd, WM_QUERYENDSESSION, 0, 0))

 return TRUE ;

SendMessage (GetParent (hwnd), WM_MDIDESTROY, (WPARAM) hwnd, 0) ;

 return TRUE ;

}

LRESULT CALLBACK HelloWndProc (HWND hwnd, UINT message,

         WPARAM wParam, LPARAM lParam)

{

 static HWND     hwndClient, hwndFrame ;

 //HDC             hdc, meta ;

PAINTSTRUCT     ps ;

 static int x1, y1, x2, y2, tmp;

 static HMETAFILE hmf;

 switch (message)

{

 case WM_CREATE:

  hwndClient = GetParent (hwnd) ;

  hwndFrame  = GetParent (hwndClient) ;

  meta = CreateMetaFile(L"picture.wmf");

  int a = 0;

  return 0 ;

 case WM_PAINT:  

  hdc = BeginPaint (hwnd, &ps);

  if(flag)

  {

   if(tmp == 1)

   {

    MoveToEx(hdc, x1,y1, NULL);

    LineTo(hdc, x2, y2);

   }

   if(tmp == 2)

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

  }

  else PlayMetaFile(hdc,hmf);

  EndPaint (hwnd, &ps);

  return 0 ;

 case WM_LBUTTONDOWN:

  x1 = LOWORD(lParam);

  y1 = HIWORD(lParam);

  break;

 case WM_MOUSEMOVE:

  flag = true;

  if(wParam & MK_LBUTTON)

  {

   x2 = LOWORD(lParam);

   y2 = HIWORD(lParam);

  }

  InvalidateRect(hwnd, NULL, TRUE);

  break;

 case WM_LBUTTONUP:

   flag = false;

  

   x2 = LOWORD(lParam);

   y2 = HIWORD(lParam);

   if(tmp == 1)

   {

    MoveToEx(meta, x1,y1, NULL);

    LineTo(meta, x2, y2);

   }

   if(tmp == 2)

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

   InvalidateRect(hwnd, NULL, TRUE);

  break;

 case WM_KEYDOWN:

  hmf = CloseMetaFile(meta);

  InvalidateRect(hwnd, NULL, TRUE);

  break;

 case WM_COMMAND:

  switch(LOWORD(wParam))

  {

   case IDM_DRAW_LINE:

    tmp = 1;

    break;

   case IDM_DRAW_RECT:

    tmp = 2;

    break;

   default:

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

  }

  break;

 case WM_MDIACTIVATE:           

  if (lParam == (LPARAM) hwnd)

   SendMessage (hwndClient, WM_MDISETMENU,

   (WPARAM) hMenuHello, (LPARAM) hMenuHelloWindow) ;      

           

  if (lParam != (LPARAM) hwnd)

   SendMessage (hwndClient, WM_MDISETMENU, (WPARAM) hMenuInit,

   (LPARAM) hMenuInitWindow) ;       

  DrawMenuBar (hwndFrame) ;

  return 0 ;

 case WM_QUERYENDSESSION:

 case WM_CLOSE:

  DeleteMetaFile(hmf);

  if (IDOK != MessageBox (hwnd, TEXT ("Закрыть окно?"),

   TEXT ("Документ"),

   MB_ICONQUESTION | MB_OKCANCEL))

   return 0 ;

  break ;

 }

 return DefMDIChildProc (hwnd, message, wParam, lParam) ;

}

Результат:

Выводы: В этой лабораторной работе я ознакомился с технологией создания многооконного интерфейса (Multiple Document Interface, MDI), получил практические навыки по составлению, написанию и отладке программ, позволяющих работать с несколькими документами (форматированными файлами) в одном приложении.


 

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

31780. Объединение аудиторов 37.5 KB
  Саморегулируемая организация аудиторов должна быть создана в форме некоммерческой организации объединять в качестве своих членов не менее 700 физических лиц или не менее 500 коммерческих фирм а также состоять в государственном реестре саморегулируемых организаций аудиторов. Причем в течение этого года уже существующие профессиональные аудиторские объединения аккредитованные при Минфине России могли провести процедуры приведения своих учредительных документов в соответствии с новыми требованиями и подать заявление в Минфин России о...
31781. Роль и значение федеральных стандартов аудиторской деятельности 42 KB
  В России где в настоящее время происходит переход от жестко регулируемой континентальной системы бухгалтерского учета к англоамериканской разработка аудиторских правил стандартов ведется самостоятельно с учетом положений международных стандартов аудита. Федеральные правила стандарты базируются на международных стандартах аудита. Правила стандарты аудиторской деятельности это как отмечается в законе об аудиторской деятельности в Российской Федерации единые требования к порядку осуществления аудиторской деятельности оформлению и...
31782. Роль МСА 30 KB
  Национальный стандарт существует в Англии Канаде США Швеции по требованию МСА в этих странах все таки принимаются к сведению в практической деятельности. Правила стандарты аудиторской деятельности единые требования к порядку осуществления аудиторской деятельности оформлению и оценке качества аудита и сопутствующих ему услуг а также к порядку подготовки аудиторов и оценке их квалификации. Стандарты аудиторской деятельности подразделяются на: федеральные правила стандарты аудиторской деятельности; внутренние стандарты аудиторской...
31783. Роль финансового анализа в аудиторской деятельности 29 KB
  Значимость аудиторской проверки с точки зрения собственника инвестора заключается не только в получении информации о достоверности финансовых результатов предприятия и соответствии учетной политики действующему законодательству но и в овладении следующей аналитической информацией для обоснованности принятия решения по управлению инвестициями: динамика предприятия рост стабильность спад; структура капитала предприятия: предполагает ли данная структура риск для вложенного капитала; место предприятия среди других предприятий данной отрасли...
31784. Рынок: сущность, условия и причины возникновения, субъекты, структура, инфраструктура, функции 43 KB
  Существует обыденное и экономическое понятие рынка. В сфере обмена рынка выступают два собственника собственник товара и собственник денег. При этом реализуются две основные стороны рынка: удовлетворение платежеспособного спроса потребителей и возмещение в денежной форме стоимости произведенной и доставленной на рынок продукции. Поэтому экономическое определение рынка Самуэльсон характеризует так: Рынок это упорядоченная структура посредство которой взаимодействуют продавцы и покупатели товара чтобы определить его цену и...
31785. СЕГМЕНТИРОВАНИЕ БУХГАЛТЕРСКОЙ ИНФОРМАЦИИ 31.5 KB
  Формулируются задачи которые должны быть решены в ходе проверки каждого сегмента устанавливаются совокупности элементов натуральных единиц или документов которые должны быть подвергнуты проверке для решения указанных задач. Задачи проверки соответствующего сегмента вытекают из критериев существования возникновения прав и обязанностей полноты оценки точности представления и раскрытия. Указанные критерии определены федеральным правилом стандартом аудиторской деятельности № 5 Аудиторские доказательства и обеспечивают достаточные...
31786. Система межбюджетных отношений в Российской Федерации 41.5 KB
  Межбюджетные отношения – это отношения между органами государственной власти на различных уровнях а также органами местного самоуправления по поводу формирования и использования бюджетных средств и обеспечения бюджетного процесса. Для того чтобы правильно раскрыть сущность межбюджетных отношений необходимо раскрыть понятие бюджетного федерализма как их определенного типа. Под бюджетным федерализмом понимают форму организации межбюджетных отношений в федеративном государстве.
31787. Система нормативного регулирования аудиторской деятельности в РФ. Федеральный закон «Об аудиторской деятельности» 37.5 KB
  Федеральный закон Об аудиторской деятельности. К правовым и законодательным документам по аудиторской деятельности в РФ относятся: Гражданский кодекс РФ; Федеральный закон Об аудиторской деятельности N 307 от 30122008 в ред. N 80 О вопросах государственного регулирования аудиторской деятельности в РФ ; Положение о лицензировании аудиторской деятельности утвержденное Постановлением Правительства РФ от 29 марта 2002 г.
31788. Система нормативного регулирования бухгалтерского учета и отчетности в России 30.5 KB
  Целью нормативного регулирования бухучета является обеспечение доступа всем заинтересованным пользователям к информации предоставляющей объективную картину финансового положения и результатов хозяйственной деятельности предприятия. Рыночная экономика потребовала разработки новой системы нормативных документов регламентирующих вопросы организации и ведения бухгалтерского учета в организации а также определения роли государственных органов в ее создании. Все вопросы организации бухучета регламентируются Министерством финансов РФ.