Разработка программы на языке С++ для построения сложных геометрических фигур на плоскости

Автор работы: Пользователь скрыл имя, 27 Февраля 2011 в 18:18, курсовая работа

Описание работы

Разработатка программы для построения изображения фигуры, приведенной на рисунке. Исходные данные (x1,y1,R1,x2,y2,r2,x3,y3,r3) должны быть считаны из выбранного пользователем файла. Осуществлять проверку исходных данных на соответствие варианту (две окружности находятся внутри третьей).

Содержание работы

1. Постановка задачи и исходные данные….………………….…………………..…3
2. Математическое обеспечение ……………………………………..…………….…4
3. Описание работы программы и полученные результаты при решении поставленной задачи ….………………………………………...………..……..……..5
4. Разработка алгоритма программы в виде блок-схемы……………………...…….8
5. Краткое описание возможностей среды программирования
Microsoft Visual C++………..………….………………………………...…………….9
6. Выводы………………………………….……………………….…………….……14
7. Список используемой литературы…….…………………………………………..15
8. Приложение А………………….…………………………………………….……..16

Файлы: 1 файл

Курсовая по программированию .doc

— 269.50 Кб (Скачать файл)

   CClientDC – объекты этого класса обеспечивают доступ к клиентской части окна. Используется для графического вывода в любой функции. При создании объекта класса CClientDC в конструкторе вызывается функция Win32 API GetDC, а при разрушении, в деструкторе – ReleaseDC, также из Win32 API, обеспечивая необходимые операции для подготовки и завершения процесса графического вывода именно и только в клиентскую часть окна. За создание объекта класса CClientDC отвечает разработчик приложения. 

   Графические объекты

   Настройка параметров графического вывода проводится двумя путями. Одни параметры настраиваются  при помощи вызова функций Win32 API или функций-членов класса CDC и производных от него, другие – путем замены так называемых графических объектов. Библиотека MFC обеспечивает разработчиков всеми необходимыми классами, которые инкапсулируют соответствующие графические объекты Windows. Кроме того, библиотека имеет в своем составе дополнительные классы, значительно облегчающие решение ряда задач (к примеру классы CPoint и CRect).

   CPen – инкапсулирует объект Windows «карандаш», который может быть выбран (назначен) в контекст устройства и использоваться для определения типа и цвета линий и границ фигур.

   CBrush – Инкапсулирует объект Windows «кисть», который может быть выбран (назначен) в контекст устройства и использоваться для определения типа и цвета заливки внутренних областей замкнутых фигур.

   Создать объекты CPen и CBrush можно двумя способами:

   1. Конструктор используется как для создания собственно объекта, так и для его инициализации.

   2. Помимо использования конструктора, только создающего объект класса, дополнительно требуется вызов  инициализирующей функции.

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

   Настройка режимов отображения

   Функции этой группы устанавливают и настраивают  систему координат, которая используется всеми функциями вывода – координаты вывода задаются именно в логических единицах. Кроме единиц по осям X и Y, функции этой группы задают направление осей и начало координат. Практически все функции группы реализованы парами. Функции с префиксом Get позволяют получить текущее значение параметра, а с префиксом Set устанавливают новое значение и возвращают предыдущее. По умолчанию начало координат находится в левом верхнем углу области вывода, (прежде всего окна). При этом ось X направлена слева направо, а ось Y – сверху вниз. Единица измерения – один пиксель (режим MM_TEXT). Кстати сказать, именно поэтому на различных устройствах, вследствие различий в размерах пикселя, фактический (визуальный) размер по оси X может не соответствовать размеру по оси Y.

   Для настройки системы координат  в Windows используются два понятия – физическая область вывода (viewport), координаты и размеры которой задаются в физических единицах – пикселях, и логическая область вывода (window), координаты и размеры которой задаются в логических единицах, определяемых размером рисования.

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

   virtual CPoint CDC::SetViewportOrg(int x, int y) или

   virtual CPoint CDC::SetViewportOrg(POINT point)

   Для настройки логической области вывода используются следующие функции:

   CPoint CDC::SetWindowOrg(int x, int y) или

   CPoint CDC::SetWindowOrg(POINT point)

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

   Из  вышесказанного следует, что есть смысл  настраивать начало координатной сетки  только для одной из областей, т.к  система координат логической области  вывода относительна системе координат  физической области. 

   Рисование линий

   Функции этой группы предназначены для рисования прямых (LineTo), гладких (Arc, ArcTo) и ломаных линий (Polyline, PolylineTo), установленным на момент рисования карандашом. Часть функций меняют при этом текущее положение карандаша, другие – нет. Даже если в результате рисования контур получается замкнутым, закрашивание не осуществляется.

   Класс CFileDialog

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

   Ниже  описаны некоторые основные функции  класса.

   CFileDialog::CFileDialog(BOOL bOpenFileDialog,

   LPCTSTR lpszDefExt = NULL,

   LPCTSTR lpszFileName = NULL,

   DWORD dwFlags = OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,

   LPCSTR lpszFilter = NULL,

   CWnd *pParentWnd = NULL) – конструктор класса, создает объект «стандартный блок диалога».

   Если  параметр bOpenFileDialog равен TRUE, создается объект «блок диалога File Open (Открытие файла)» и объект «блок диалога File Save As (Сохранение файла)», если bOpenFileDialog равен FALSE.

   virtual int CFileDialog::DoModal() – вызов этой функции выводит на экран модальный стандартный блок диалога для открытия или сохранения файла. При успешном завершении функция возвращает IDOK или IDCANCEL в зависимости от того, при помощи какой кнопки пользователь закрыл блок диалога.

   Для того чтобы получить имя файла, определенное пользователем в блоке диалога, в классе реализованы несколько  функций:

   virtual CString CFileDialog::GetPathName() – возвращает полное имя файла, включая путь.

   virtual CString CFileDialog::GetFileName() – возвращает имя файла с расширением.

   virtual CString CFileDialog::GetFileExt() – возвращает расширение имени файла.

   virtual CString CFileDialog::GetFileTitle() – возвращает имя файла без расширения.  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

   Выводы 

   В ходе выполнения курсовой работы были получены основы разработки Windows – приложений с использованием MFС. Был освоен объектно-ориентированный язык программирования Visual C++.

   В результате работы была написана программа, которая строит изображение фигуры, приведенной на рисунке 5. При исходных данных (x1, y1,R1, x2, y2, r2, x3, y3, r3), которые должны быть считаны из выбранного пользователем файла. Осуществил проверку исходных данных на соответствие варианту: две окружности находятся внутри третьей. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

   Список  используемой литературы 

   1. Шилдт Герберт «Полный справочник  по С++»- 4-е издание.: Пер.с англ. – М.: Издательский дом «Вильямс», 2002.- 704с.: ил. 

   2. Мешков А., Тихомиров Ю. «Visual C++ и MFC» - СПб.:БХВ-Петербург. 2002 – 1017с. 

   3. Карпов Б., Баранов Т. «С++: специальный справочник» - СПб.: Питер, 2001. – 480 с.:ил. 

   4. Основы Microsoft Visual Studio. Net 2003/ Пер. с англ. - М.:Издательство- торговый дом "Русская редакция", 2003.-464 с: ил. 

   5. Круглински Д., Уингоу С, Шеферд Дж.  «Программирование на Microsoft Visual C++ 6.0 для профессионалов»/Пер. с англ.- СПб: Питер, М.:Издательсво- торговый дом "Русская Редакция", 2004.- 861 с.:ил. 

   6. Бьярн Страуструп « Введение в язык СИ++», 1995  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

   Приложение А 

   CMyDlg.cpp 

   #include "stdafx.h"

   #include "4ertejmfc.h"

   #include "4ertejmfcDlg.h" 

   #ifdef _DEBUG

   #define new DEBUG_NEW

   #endif 

    CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) // конструктор класса, создает объект “стандартный блок   

                 диалога”

         : CDialog(CMyDlg::IDD, pParent)

   {

         m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

   } 

   void CMyDlg::DoDataExchange(CDataExchange* pDX)

   {

         CDialog::DoDataExchange(pDX);

   } 

   BEGIN_MESSAGE_MAP(CMyDlg, CDialog)

         ON_WM_PAINT()

         ON_WM_QUERYDRAGICON()

         ON_WM_SIZE()

         ON_BN_CLICKED(IDC_BUTTON2, &CMyDlg::OnBtnUpdate)

         ON_BN_CLICKED(IDC_BUTTON1, &CMyDlg::OnBtnLoad)

   END_MESSAGE_MAP()

   // обработчики сообщений 

   BOOL CMyDlg::OnInitDialog()

   {

         CDialog::OnInitDialog(); 

         SetIcon(m_hIcon, TRUE); // Set big icon

         SetIcon(m_hIcon, FALSE); // Set small icon 

         return TRUE;

   } 

   void CMyDlg::OnPaint()

   {

         CPaintDC dc(this); // контекст устройств для рисования 

         if (IsIconic())

         {

               SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); 

               int cxIcon = GetSystemMetrics(SM_CXICON);

               int cyIcon = GetSystemMetrics(SM_CYICON);

               CRect rect; // объявили о создании объекта класса CRect

               GetClientRect(&rect); //передаем размеры иконки в объект Rect

               int x = (rect.Width() - cxIcon + 1) / 2;

               int y = (rect.Height() - cyIcon + 1) / 2; 

               dc.DrawIcon(x, y, m_hIcon); //рисование

         }

         else

         {

               k_Draw.Draw(&dc);

         }

   } 

   HCURSOR CMyDlg::OnQueryDragIcon()

   {

         return static_cast<HCURSOR>(m_hIcon);

   } 
 

   void CMyDlg::OnBtnLoad()

   {

      CFileDialog fd(1, 0, 0, 4|2, _T("txt files (.txt)|*.txt|"), this);  // CFileDialog fd(TRUE, ".txt", "ReadMe", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, Filter);

объявили о  создании объекта класса CFileDialog для открытия файла 

         if(fd.DoModal() != IDOK)return;

         k_filePath = fd.GetPathName(); // открыли файл, выбранный пользователем, на чтение

         if(!k_Draw.LoadParamFromFile(k_filePath.GetString()))

               this->MessageBox(_T("Can't load params"));

         this->RedrawWindow();

   }

   void CMyDlg::OnSize(UINT nType, int cx, int cy)

Информация о работе Разработка программы на языке С++ для построения сложных геометрических фигур на плоскости