4974

Введение в программирование под Windows на C++

Контрольная

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

Введение в программирование под Windows. Развитие графической операционной системы Windows привело к тому, что программы, поддерживающие консольный ввод исходных данных и вывод результатов в текстовом режиме стремительно устаревает. К современным пр...

Русский

2012-11-30

28.81 KB

10 чел.

Введение в программирование под Windows.

Развитие графической операционной системы Windows привело к тому, что программы, поддерживающие консольный ввод исходных данных и вывод результатов в текстовом режиме стремительно устаревает. К современным программам как правило предъявляются требования, чтобы они использовали графические средства ввода-вывода, предоставляемые операционной системой Windows.

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

Чтобы облегчить работу программиста, практически все современные компиляторы с языка C++, в том числе MS Visual C++, содержат специальные библиотеки классов. Такие библиотеки включают в себя практически весь программный интерфейс Windows и позволяют пользоваться при программировании средствами более высокого уровня, чем обычные вызовы функций. За счет этого значительно упрощается разработка приложений, имеющих сложный интерфейс пользователя.

MS Visual C++ имеет следующие средства автоматизации процесса создания графического Windows приложения:

- мастер создания проекта Windows- приложения на основе библиотеки классов Microsoft Foundation Classes (MFC) Application Wizard;

- мастер создания нового класса

- мастер добавления в класс новой переменной

- мастер добавления в класс новой функции

- средства визуального редактирования графических ресурсов: диалоговых окон, панелей инструментов, меню, иконок и т.д.

- мастер добавления функций-обработчиков событий: (наведение мыши на орган управления).

Создание графического приложения начинается с запуска мастера создания проекта MFC Application Wizard. Как при создании любого приложения, из главного меню Visual C запускается команда File->New->Project. В окне шаблон приложения (Templates) выбирается MFC Application, в окне Project name задается имя проекта. После нажатия кнопки Finish запускается MFC Application Wizard.

MFC Application Wizard состоит из следующих основных разделов:

Application type (Тип приложения)

Database support (поддержка баз данных)

User interface features (задание начального внешнего вида главного окна приложения)

Наиболее важным разделом является Application type. Он позволяет выбрать один из трех типов приложений:

Single Document (Однодокументное приложение) для создания приложений, работающих только с одним документом на основе концепции документ-представление (Document View).

Для использования данной концепции должен быть установлен флажок Document/View Architecture Support.

Multiple Documents (Многодокументное приложение) для создания приложений, работающих с несколькими документами на основе концепции документ-представление.

Dialog based для создания диалоговых приложений

В списке Resource Language следует выбрать English.

При создании однодокументного или многодокументного приложения c именем MyProg, использующего концепцию Документ-представление,  автоматически создаются следующие основные классы:

- класс приложения СMyProgApp

- класс документа CMyProgDoc, который отвечает за хранение документа в памяти компьютера

- класс представления CMyProgView, который отвечает за отображение документа на экране

- класс главного окна приложения СMainFrame

При создании диалогового приложения без главного окна и поддержки архитектуры Документ-представление с именем MyProg создаются следующие классы:

- класс приложения CMyProgApp

- класс диалога CMyProgDlg

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

Принцип работы Windows приложение, заключается в следующем. Изменение состояние различных устройств компьютера, например, нажатие кнопки мыши, воспринимаются операционной системой как события. При возникновении определенных событий ОС генерирует стандартные сообщения. Каждая разновидности события соответствует уникальный номер сообщения. Программа представляет собой бесконечный цикл, который находится в ожидании сообщения. При появлении сообщение вызывается соответствующая функция обработчик сообщений.

Наиболее простым для разработки является диалоговое приложение без главного окна и поддержки концепции документ представление. Данный тип приложения рекомендуется взять за основу при выполнении курсовой работы.

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

Для просмотра ресурсов служит окно Resource View, которое открывается с помощью команды View->Resource View. Оно содержит папку Dialog, в котором находится идентификатор диалогового окна IDD_MYPROG_DIALOG. При выделении идентификатора и двойном щелчке мыши форма диалоговой панели появляется в окне редактирования.

Для добавления в форму органов управления используется окно ToolBox, которое содержит различные органы управления, которые можно вытягивать и размещать в форме диалогового окна. Наиболее часто используемыми органами управления являются Button, Check Box, Radio Button, Edit Control, Combo Box, Static Text.

После вытягивания органов управления задаются их свойства в окне Properties. При выделении очередного органа управления его свойства автоматически отображаются в окне Properties. Они условно разделены на три группы: Appearance (Внешний вид), Behavior(поведение), Misc(Разное)

В первую очередь необходимо обратить внимание на свойство ID, значением которого является идентификатор органа управление. Он представляет собой некоторое буквенное обозначение, которому соответствует целая константа. Значение идентификатора по умолчанию может быть изменено на более близкое к смыслу решаемой задачи.

После того, как свойства заданы, для каждого органа управления можно назначать обработчики событий. Для этого выделяется нужный орган управление, нажатием правой кнопки мыши открывается контекстное меню и выбирается команда Add Event Handler. В результате запускается мастер добавления обработчиков событий Event Handler Wizard. В окне Message type выбирается идентификатор типа сообщения. Список идентификаторов типа сообщения зависит от типа органа управления

Например, идентификатор BN_CLICKED для органа управления Button соответствует нажатию левой кнопки мыши. В окне Function Handler Name автоматически генерируется имя функции обработчика, который добавляется в класс диалога, выбранный по умолчанию в окне Class list.

Нажатие кнопки Add and Edit приводит к появлению нового обработчика и дает возможность его редактировать.

Пусть, диалоговое окно содержит окно редактирования Edit Control с идентификатором IDC_INPUT и кнопку Button c идентификатором IDC_SQUARE. Необходимо, чтобы по нажатию кнопки число в окне редактирования возводилось в квадрат. В этом случае обработчик нажатия кнопки должен выглядеть следующим образом:

void CMyProgDlg::OnBnClickedSquare()

{

 int k,m;

k=this->GetDlgItemInt(IDC_INPUT);

m=k*k;

 this->SetDlgItemInt(IDC_INPUT,m);

}

Во многих программах по воздействию на различные органы управление необходимо отображать в окне графическую и текстовую информацию.

Для этих целей используют ряд классов, входящих в состав библиотеки MFC. К ним относятся: окно, графический контекст, световое перо, кисть, шрифт и др.

Окно- прямоугольная область для вывода информации

Графический контекст – совокупность программных средств, делающих вывод графической информации независимым от типа видео платы и монитора.

Световое перо – класс режима отображения линий

Кисть – класс режима отображения замкнутых областей окна.

Шрифт – класс стиля отображения текста.

.Рассмотрим пример обработчика нажатия кнопки с идентификатором ID_RIS1

void CMyProgDlg::OnBnClickedRis1()

{

CWnd* pWnd;//определение указателя на будущее окно общего назначения (класс CWnd)

CString strMyClass;//определение строки для задания класса окна.

 //Класс окна - объект строкового типа, который содержит свойства окна

 //вызов функции регистрации класса окна

 //Входной параметр - комбинация констант со стандартными именами

 //| - знак объединения констант

 //Каждая константа отвечает за определенное свойство

strMyClass = AfxRegisterWndClass(

   CS_VREDRAW //перерисовка при изменении вертикальных размеров

   | CS_HREDRAW //перерисовка при изменении горизонтальных размеров

   | CS_OWNDC //задание собственного контекста графического устройства

   );

pWnd= new CWnd; //динамическое выделение памяти под окно

pWnd->CreateEx(//вызов функции создания окна

  WS_EX_OVERLAPPEDWINDOW,//расширенный стиль

  strMyClass,//зарегистрированный класс окна

  "ABC",//строка заголовка окна, если он есть

  WS_POPUP //стиль окна - всплывающий

  | WS_VISIBLE//видимый

  | WS_BORDER,//с рамкой

  0, 0, 100, 100,//координаты

  m_hWnd,//дескриптор

  0);

pWnd->ShowWindow(SW_SHOW);

pWnd->UpdateWindow();

 CClientDC dc(pWnd);//описание клиентского контекста графического устройства

 //в качестве параметра конструктора используется указатель на окно

RECT rect;//определение прямоугольника для хранения координат окна

 

CPen NewPen;//определение своего пера для отображения линий

   CPen *OldPen;//определение указателя на старое перо

CBrush NewBrush;//определение кисти для закрашивания замкнутых областей

CBrush* OldBrush;//определения указателя на старую кисть

 

CFont NewFont;//определение шрифта

CFont *OldFont;//указатель на старый шрифт

CString sOut;//строка для вывода в окно

 int a=5;//переменная для вывода в окно

pWnd->GetClientRect(&rect);//извлечение координат окна для их использования при рисовании

NewPen.CreatePen(//задание параметров нового пера

 PS_SOLID,//непрерывная линия

 1,//толщина динии

 RGB(255,0,0)//цвет как комбинация кодов оттенков красного, зеленого и синего цвета

 );//

OldPen=dc.SelectObject(&NewPen);//установка нового пера с сохранением старого

NewBrush.CreateSolidBrush(RGB(255,255,255));//задание параметров новой кисти(только цвет)

OldBrush=dc.SelectObject(&NewBrush);

NewFont.CreateFont( //создание нового шрифта

     14,                        // высота

     0,                         // ширина

     0,                         //

     0,                         // ориентация

     FW_NORMAL,                 // жирность

     FALSE,                     // курсив

     FALSE,                     // подчеркивание

     0,                         //

     ANSI_CHARSET,              // набор символов

     OUT_DEFAULT_PRECIS,        // nOutPrecision

     CLIP_DEFAULT_PRECIS,       // nClipPrecision

     DEFAULT_QUALITY,           // nQuality

     DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily

     "Arial"     //название шрифта

     );

dc.SetMapMode(MM_TEXT);//задание режима преобразования логических координат

    //задаваемых при рисовании объектов в пиксели

 //окраска окна в белый цвет

dc.FillSolidRect(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,RGB(255,255,255));

dc.MoveTo(0,0);//перемещение светового пера в точку 0,0

dc.LineTo(10,10);//рисование линии до токи 10,10

dc.Rectangle(10,10,30,30);//рисование прямоугольника

 

dc.MoveTo(50,50);//перемещение пера в точку 50,50

 dc.AngleArc(50,50,30,0,360);//рисование дуги с центром 50,50 радиусом 30,

       //начальным углом 0, конечным углом 360 градусов

 

sprintf(sOut.GetBuffer(128),"a=%d",a);//печать переменной с надписью в буфер строки

sOut.ReleaseBuffer();//освобождение буфера

dc.TextOut(40,40,sOut);//вывод строки

 dc.SelectObject(OldPen);

NewPen.DeleteObject();

 

dc.SelectObject(OldBrush);

NewBrush.DeleteObject();}