Реферат: Visual C++ 6 - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Visual C++ 6

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 439 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

Визуализация контактных преобразований в среде Visual C++ 6. Новый 32-разрядный компилятор Microsoft Visual C++ 6.0 для Windows NT и Windows 95 - одна из составных частей мощного пакета компиляторов Developer Sudio, в который вхолят новейшие версии таких известных программных продуктов , как Visual Basic, Visual J++, Visu al FoxPro ... Система программирования Visual C++ - один из наиболее полных и совершенных продуктов , предназначенных для разработки программного обеспечения . Это высокоскоростная и удобная для программировани я система , предлагающая широкий набор разнооб раз ных инструментов проектирования для лю бого стиля программирования . Новые компоненты содержат средства для программирования приложени й , улучшенную реализацию ActiveX и Internet , дополнительные возможности разрабо тки баз данных , а также новые архитектуры при ложений и элементы взаимодействия между поль зователями . Изучение правил применения данной системы программирования (часто очень не прос тых , на первый взгляд ) может вас испугать , как это произошло со мной при первом знакомстве со средой Visual C++ . Глава 1. Создание графического интерфей са. Для создания моей программы мне по требуется программирование графического интерфейса ( GUI- Graphical User Interface) . В прог раммах с графическим интерфейсом можно создав ать одно и более окон с элементами ин терфейса (ме ню , панели инструментов , строки состояния , списки , полосы прокрутки и тд ). Данные программы могут выводить рисунки , растровые изображения и текст с использовани ем большого набора шрифтов . Я буду создава ть свою программу , используя мастер генерации приложе н ий App Wizard и библиотеки MFC . Существует несколько способов написания программ с графическим интерфейсом с помощ ью Visual C++ . В о-первых – на языке С или С ++ с неп осредственным обращением к основным функциям Win32 API , которы е являются частью операционн ых систем Windows . При таком подходе требуется написать множество строк программного кода , прежде чем перейти к решению целевой задачи разрабатываемого приложения . Во-вторых – с помощью библиотеки MFC , содержащей большой набор готовых классов и вспомога т ельный код для выполнения стандартных задач программирования в среде Windows (например , со здания окон и обработки сообщений ). Кроме того , MFC и спользуется для быстрого добавления в програм мы панелей инструментов , многопанельных окон поддержки OLE . Применяе тся для создания элементов , которые используются программными компонентами и отображаются в Web- браузерах и других приложениях . Использование MFC позволяет упростить программы с гра фическим интерфейсом , что значительно облегчит процесс программирования . От метим : функции MFC содержа т вызовы функций Win32 API . Говорят , что Win32 API “упакован” в библиотеку MFC , предс тавляющую более высокоуровневые и переносимые средства программного интерфейса . Кроме того , в MFC -про граммах можно свободно вызывать функции Win32 API , сохраняя во зможность использования этого интерфейса. В-третьих – на языке С ++ с испол ьзованием библиотеки MFC и различных мастеров . Мастер AppWizard используе тся для генерации основы исходных файлов программ . Аналогично , мастер AppWizard гене рирует основн ую часть кода для определения производных классов и обработчиков сообщений , настройки библиотеки MFC , управления диалоговыми окнами , а также выполнения других задач . Заметьте : возможност и мастеров не ограничиваются генерацией прост ых оболочек программ . Они позволяют созд авать программы с большим набором сложных компонентов . К таковым относятся панели инс трументов , строки состояния , контекстная справка , объекты OLE , средства доступа к базам данных и даже законченные меню с частично или полность ю функционирующими командами открытия и сохранения файлов , печати , предварительного про смотра печати и выполнения других задач . П осле генерации основного кода программы с помощью мастера добавьте собственный код , о пределяющий логику работы программы Преиму щество третьего подхода сост оит в использовании не только уже написан ного кода MFC , но и сгенерированного исходного кода , позволяющего решить многие рутинные задачи программирования . Библиотека MFC и матера освобождают нас от необходимости создавать средст в а визуального интерфейса вручную и обеспечива ют соответствие этого интерфейса требованиям MicroSoft . Генерация исходного кода. Для генерации программы с помощью AppWizard создаётся новый проект необходимого типа . Затем в последовательности диалоговых око н , отоб ражаемых мастером , задаются требуемые характерист ики программы . Запускаем Developer Studio и выполняем следующие ш аги : Выбираем в меню File команду New . В результате отобразит ся диалоговое окно New. Открываем вкладку Projects ( если она не отображе на ), чтоб ы можно было создать новый проект. В списке типов проекта выбираем “ MFC AppWizard(Exe)” . Это приведёт к тому , что мастер AppWizard сначала пре дложит ввести необходимую информацию , а затем создаст основу кода MFC- программы. Вводим имя Ellipse в пол е Project Name . Visual C ++ присвоит новому проекту и связанной с ним рабочей области имя Ellipse . В поле Location задаём путь к папке с файлами , т.е . к каталогу проекта . Можно принять с тандартный каталог , указанный в этом поле . Стандартному каталогу присва ивается то ж е имя , что и рабочей области – Ellipse . Чтобы завершить работу с вкладкой Projects диалогового окна New , убедитесь , что в поле Platforms отмечен пун кт Win32 . До тех пор , пока не будет установлена ве рсия Visual C++ с о средствами кросс-платформен ной разработки , Win32 остане тся единственной опцией в этой области. Щелкаем на кнопке ОК в диалоговом окне . Отобразится первое из диалоговых окон мастера AppWizard , помеченное “ MFC AppWizard – Step 1” . В параметрах мастера AppWizard , выбира емых по умолчани ю , будет указано станд артное значение . В диалоговом окне выбираем тип прилож ения Single Document , отмечаем стандартный параметр Document/View Architecture Support и зад аём поддержку английского языка . Выбор типа приложения Single Document определяет то , ч то AppWizard генерирует приложения с однооконным интерфейсом (Single Document Interface – SDI) , от ображающее единственное окно документа . Задание параметра Document / View Architecture Support приведёт к тому , что мастер AppWizard сгенер ирует отдельные клас сы для хранения и отображения данных программы , а также код для чтения и записи данных на диске . Щёлкаем Next для перехода к следующему диалоговому окну. Чтобы исключить из программы поддержку баз данных , в диалоговом окне выбираем пункт None . Щёлкаем Nex t для перехода к следующему диалого вому окну. В диалоговом окне выбираем пункт None чтобы искл ючить из программы поддержку составных докуме нтов . Убираем опцию Automation , чтобы устранить поддержку авто матизации . Щелкаем Next , чтобы перейти к следующему ди а логовому окну. В диалоговом окне выбираем поддержку печати (Printing and Print preview) , панель инструментов (Docking toolbar) , строку состояния (Initial status bar) и поддержку помощи (Context-sensitive Help) , а также 3D controls. Щёлкаем Next , чтобы перей ти к следующем у диалоговому окну. Чтобы сгенерировать для программы традици онный пользовательский интерфейс библиотеки MFC , в диалогов ом окне мастера выбираем установку стиля проекта “ MFC Standart” . Чтобы мастер включил комментарии в генерируемые исходные файлы , выбираем установку “ Yes,Please” . Комментарии поясняют назначение кода и определяют места , в которые программист должен добавить собственный код . Наконец выбираем вариант связи библиотеки MFC “ As a staticaly linked library”. При этой установке код пе реносится пр ямо в исполняемый файл . Щёлкаем на Next , чтобы отобра зить следующее диалоговое окно. Это диалоговое окно отображает информацию по каждому из четырёх главных классов , созданных для программы мастером . Не изменя ем эту информацию . Щелкаем Finish Д иалоговое окно New Project Information позволяет подытожить сделанный ранее выбор характеристик прогр аммы . Щелкаем ОК , и мастер создаст указанн ый каталог проекта , сгенерирует исходные файл ы программы и откроет вновь созданный про ект Ellipse . Классы и ф айлы програ ммы. Программу Ellipse будем называть прилож ением с однооконным интерфейсом (SDI) . Это означает , что в данный момент времени в ней может отображаться только один документ . Ко гда мастер создаёт приложение SDI , он порождает четыре главных класса : · класс докуме нта ; · класс предст авления ( view); · класс главно го окна ; · класс прилож ения ; Исходные задачи программы распределяются по этим четы рём главным классам , и мастер создаёт четы ре отдельных исходных файла для каждого и з них . По умолчанию он п орождает и мена классов и исходных файлов по имени проекта. Класс документа в Ellipse называется C Е llipseDoc . Он порождае тся из класса CDocument библиотеки MFC . Заголовочный файл CEllipseDoc имеет имя CEllipseDoc.h , а имя файла реализации - CEllipseDoc.cpp . Класс документа отвечает за хранение данных программы и за чтен ие и запись данных на диск . Класс представления в Ellipse называется C Е llipseView и порождает ся от MFC -класса Cview . Заголовочный файл CEllipseView называется CEllipseView.h , а имя файла ре ализации - CЕ llipse.cpp . Кла сс представления отвечает за отображение данн ых программы (на экране , на принтере , или другом устройстве ) и за обработку информаци и , вводимой пользователем . Этот класс управляет окном представления (view window) , котор ое исполь зуется для отображения данных программы на экране . Класс представления в Ellipse прос то отображает строку сообщения внутри окна представления. Класс главного окна в Ellipse называется CMainFraim и порожд ается от MFC -класса CFrameWnd . Заголовочный файл CMa inFrame называется MainFrm.h , а имя ф айла реализации - MainFrm.cpp . Класс главного окна управляет главным окном программы , которое является обр амляющим окном и содержит рамку окна , стро ку заголовка , строку меню и системное меню . Обрамляющее окно также соде ржит кноп ки Minimize, Maximize, Close, а иногда и другие элементы пользовательско го интерфейса , например , панель инструментов , с троку состояния . Окно представления , управляемое классом представления , занимает внутри обрамляю щего окна пустую область , котора я назы вается клиентской областью главного окна . Окн о представления не имеет видимых элементов , кроме текста и графики , отображающейся явно . Окно представления – дочернее окно глав ного окна , поэтому оно всегда отображается поверх и внутри границ рабочей об л асти главного окна. Наконец , класс приложения назван CEllipseApp и порожден из MFC – класса CWinApp . Файл заголовк ов класса CEllipseApp назван Ellipse.h , а файл реализации – Ellipse.cpp . Класс прило жения управляет программой в целом . Это зн ачит , что он выпо лняет общие задачи , не относящиеся к каким-либо другим трём классам (например , инициализацию программы и её заключительную очистку ). Каждая MFC – программа дол жна создать в точности один экземпляр кла сса , порождённого из класса CWinApp. Четыре главных класса обращаются друг к другу и обменива ются данными , вызывая открытые функции-члены д ругого класса и посылая сообщения. Глава 2. Использование функций рисования Создание объекта контекста у стройства 2) Выбор инструментов рисования 3) Выбор стандартных инструм ентов рис ования 4) Создание инструментов рисования Существуют два различных подхо да к созданию и манипулированию графическими изображениями . Можно также вызвать функ ции рисования в процессе выполнения программы . Эти функции предназначены для создания рису нков , состоящих из отдельных геометрическ их фигур , таких , как прямые линии , дуги и прямоугольники . Возможно создание и отобра ж ение растровых изображений (называемых точечными рисунками ), сохраняющих текущие коды пикселей , используемых для воспроизведения обр азов на устройстве . Растровые изображения удо бны для создания более сложных рисунков , к оторые нелегко разделить на отдельные геометр ические фигуры . Средства , описанные в этих главах , взаимосвязаны . Функции рисования использую тся для изменения узоров пи к селей внутри растровых изображений , а битовые о перации применяют ся для манипулирования изображе ниями , созданными с помощью функций рисо вания , например , для перемещения или растягивания изображения. Рассматривается как используются функции рисования , пред остав ляемые системой Windows и библиотеко й MFC . Эти функции в сочетании с растровыми средств ами составляют полный набор инструментов созд ания графических образов внутри окна представ ления или какого-либо другого уст ройства (напр имер , принтера ). Существую т специальные тех нические приемы печати графических изображений или текстов . В этой главе я рассмотрю основные действия , выполняемые при создании графических изображений : 1. Создание объекта контекста устройства. 2. Выбор средств рисования внутри объекта . 3. Установка атрибутов рисования для объе кта. 4. Вызов функций-членов объекта для рисов ания графики. 1).Создание объекта контекста устройства Как известно , для отображения текста и ли графики необходим объект кон текста устрой ства , соответствующий окну ил и устройству вывода данных . При рисовании этот объект сохраняет выбранные средства и установленные атрибуты и предоставляет функции-члены для рисования точек , линий , прямоугольников и др угих фигур. Для отображения графического объекта с помощью функции OnD raw класса представления использует ся объект контекста устройства , адрес которог о передает ся в функцию. void CMyView::OnDraw (CDC* pDC ) // отобразите графику , используя ' pDC ->' Функция OnDraw вызывается при рисовании или перерисов ке окна представ ления . Если класс пре дставления поддерживает прокрутку (т . е . порожд ен от класса CScrollView ), то переданный в него объект контекста устройства настраивается на текущую позицию прокрутки документа. Если программа отображает графику не в окне представления, а в каком-то другом окне (нап ример , в диалоговом ), то класс окна для рисования или перери совки предоставляет обработч ик сообщений wm _ paint , называемый OnPaint , который созд ает объект контекста устройства , порождаемый от MFC-класса CPaintDC . void CMyDialog::OnPaint() CPaintDC PaintDC (this) ; // отобразите графику , используя ' PaintDC ". . . ) Примечание Когда нужно нарисовать или перерисовать окно представления , ему передают сообщение wm _ paint . Класс cview предоставляет функцию OnPaint, к оторая создает и подготавли вает объект контекста устройства , а затем передает его в функ цию OnDraw. Класс окна , ко торый не порождается от cview, должен предоставлять собственную функцию OnPaint, выполняющую рисование содержимого окна. Чтобы отобразить гр афику в окне представления или другом окне из функции , которая не обрабатывает сообщения OnDraw или OnPaint, нужно создать объект контекста устройства , являющийся членом MFC-класса CClientDC . Если окно представления поддерживает п рокрутку , то перед использ ованием объекта необхо димо вызвать функцию CScrollView : : OnPrepareDC для настройки объект а на текущую позицию документа. void CMyView :: OtherFunction () CClientDC ClientDC ( this ) // Если графика отображается в окне представления , // поддерживающем пр окрутку : OnPrepareDC ( sdientDC ) ; // для отображения графики используется ' ClientDC ' ... Чтобы отобразить графику вне рабочей области окна , создаём объект класса cwindowDC . Все функции рисования являются членами класса CDC . Так как cdc — базовый клас с по отношению к остальным классам объекта контекста устройства , то эти функци и вызываются при использовании объекта контек ста устройства произвольного типа. Основной акцент сделан на рисовании в нутри окна (прежде всего окна представления ). Однако перечисл енные функции и способы не зависят от типов устройств и испо льзуются для отображения рисунков на других уст ройствах , например принтерах или плоттера х. 2)Выбор инструментов рисования . Имеются два инструмента , выбор которых отражается на работе функций кла с са CDC — перо и кисть. Перо влияет на способ рисования ли нии . Оно действует как на прямые и кри вые линии (например , нарисованные с использова нием функции LineTo или Arc ), так и на границы замкнутых ф игур (например , прямоугольников и эллипсов ). Кис ть действ ует на способ рисования внут ренней области замкнутых фигур . Очевидно , что замкнутая фигура состоит из двух отдельн ых элементов : границы и внутренней области. Инструменты рисования, определенные в этом разделе , т.е . перья и кисти , принадлежат к категории о бъектов , называемых графич ескими или объ ектами GDI (термин объект отно сится к структуре данны х Windows , а не к объекту C++; GDI означает графичес кий интер фейс устройства – graphics device interface ). Существуют другие графические объекты : шрифты , раст ровые изображения , области , контуры и палитры . Хотя области , контуры и палитры также относятся к рисованию . Полное описание областей , контуров и палитр приведено в следующих разделах справочной системы : Platform SDK , Graphics and Multimedia Services , GDI . Информация об и спользовании областей и палитр в MFC - в следующих разделах справочной системы : Visual C++ Documentation , Reference , Microsoft Foundation Class Library and Templates , Microsoft Foundation Class Library , Class Library Reference , CRgn и CPal ette . Информация об использовании контуров в MFC - в разделах Visual C++ Documentation, Reference, Microsoft Foundation Class Library and Templates, Microsoft Foundation Class Library, Class Library Reference, CDC, CDC Class Members, а та кже в разделе Path Functions. При первичном создании объект контекста устройства содержит заданные по умолчанию перо и кисть . Перо рисуе т сплошную черную линию шириной в 1 пиксел ь независимо от текущего режима отображения (который будет рассмотрен далее ). Кисть за ливает вн утреннюю область фигуры с за мкнутым контуром непрозрачным белым цветом . Д ля каждого из этих инструментов приведены функции рисования , на которые влияет выбор инструмента , и выбранный по умол чанию ид ентификатор инструмента . Если нужно выбрать и нструмент , и дентифи катор передается в функцию SelectStockObject . Чтобы изменить текущее перо или ки сть , выбираем стандартное перо или кисть и ли создаём пользовательские , а затем выбираем их в объекте контекста устройства . Выбран ные перо или кисть используются до сл едующего явного выбора других инструменто в рисования. 3)Выбор стандартных инструментов рисования Выбирается перо или кисть вызовом фун кции SelectStockObject класса cdc : CGdiObject * SelectStockObject ( int nIndex ); Параметр n I ndex является кодом отдельного стандартного объекта , который передается в объект контекста устройства . Можно вызват ь функцию SelectStockObject для выбора стандартного шрифта. Например , следующие строки выбирают белое перо и серую кисть. void CMyView:;OnDraw(CDC* pDC) ( pDC->SelectStockObject (WHITE_PEN) ; pDC->SelectStockObject (GRAY_BRUSH) ; // Вызов других графических фу нкций и рисование графики ... // (линии и грани цы будут белыми , внутренние области // фигур с замкнутыми контурами - серыми ) При выборе пера null _ p en линии не рисую тся . Значит , выбор не удачен . Аналогично пр и выборе NULL _ BRUSH внутренняя часть фигуры не закрашивается . Э тот инструмент удобен при рисовании фигур , состоящих только из границы (прямоугольник ), если необходимо оставить неизменным существую щее на экране графическое изображение внутри границы . Примечание Стандартное перо рисует сплошные линии шириной в один пиксель независимо от з аданного режима отображения . Стандартная кисть закрашивает сплошным цветом , а не узорами. 4)Создание инструменто в рисования Можно создать перо или кисть , выполнив следующие действия. 1. Создаём экземпляр класса СРе n для пера и ли CBrush дл я кисти. 2. Вызываем соответствующую функцию класса СРе n или CBrush для инициа лизации пера или к исти. 3. Выбираем перо или кисть в об ъекте контекста устройства , сохраняя указатель на предыдущее перо или кисть. 4. Вызываем функции рисования для выполне ния графического вывода. 5. Снова выбираем старое перо или кис ть в объекте контекста устройства. Для создания временного пера или кист и можно объявить экземпляр класса СРе n или CBrush как локальный объект внутри функции , генерирующей графический вывод . Этот метод продемонстрирован в примере фрагмента программы , приве денном в конце этого раздела . При многократном использовании в программ е выбранного п ера или кисти объект удобнее объявить как переменную класса пред ставления или любого класса , управляющего окном вывода. Для инициализации пера вызываем функцию CreatePen кла сса СРе n . BOOL CreatePen (int nPenStyle, int nWidth, COLORREF crColo r) ; Параметр nPenStyle описывает стиль линии , нар исованной пером . Присваивание стиля ps _ null создает перо , совпадающее со стандартным пером null _ pen . Стиль ps _ insideframe выбира ет перо для рисования границы вокруг фигу ры с замкнутым контуром , расположенно й внутри ограничивающего прямоугольника . Ограничиваю щие прямоугольники и эффекты стиля ps _ insideframe описаны далее . Стили ps _ dash , ps _ dot , ps _ dashdot и PS dashdotdot используются , если ширина пера равна 1 пикселю . Если ширина пера превышает этот размер , т о перечисленные стили генерируют сплошные линии. Параметр nWidth описывает ширину линии в логических единицах, используемых в текущем режиме отображе ния . Если ширина пера — 0, то ширина линии — 1 пик сель , независимо о т текущего режима отображения . Такая шир ина генерируется и стандартным пером , и за данным по умолчанию. Параметр crCo l or задает цветовой код линии . Легче всего описать цвет , используя макрос Win32 rgb . ColorRef RGB (bRed, bGreen, bBlue) Параметры bRed , bGreen и bBlue показывают относительную и н тенсивность красного , зеленого и синего цвето в . Каждому параметру можно присвоить значение в диапазоне от 0 до 255. В табл . 19.3 приведен ы значения , которые передаются в макрос RGB для опи сания 16 чистых цветов , доступных в стандартном графическом режиме VGA . Обратим внимание : перу присваивается толь ко чистый цвет . Чистый цвет - это цвет , генерируемый аппар атными средствами для видеоотображения , который не требуется имитировать смешиванием различных цветов (извес тным как имитация полутонов ( dithering )). Ес ли присвоить перу цве товой код , который не относится НИ к о дному из чистых цветов , то линия будет нарисована с использованием ближайшего чистого цвета . Исключение из этого правила : если перо имеет стиль ps _ insideframe и ширину боле е 1 пикселя , то Windows и спользует полутона (если присвоенный цвет не является чистым ). Примечание Класс С P е n предоставляет более совершенную функцию инициа лизации пера , называемую ExtCreatePen . В среде Windows NT эта функция задает способ изменения и объединения широ ких перьев , ч то позволяет создавать пе рья с пользовательским стилем . Однако Windows 95 не поддержи вает большинство из этих средств . Заметим также , что вместо вызова функции CPen : : CreatePen , объект пера можно инициализировать при его создании , передавая конструктору С P е n соответствующие параметры . Информация о конструкторах СРе n и ExtCreatePen - в следующих разделах справочной системы : Visual C++ Documentation, Reference, Microsoft Foundation Class Library and Templates, Microsoft Foundation Class Library, Class Librar y Reference, СРеп . Кисть можно инициализировать т ак , чтобы она окрашивала однородным цветом внутреннюю область фигур , вызывая функцию CreateSolidBrush класса CBrush с параметром crColor , описывающим цвет заливки . Можно задать любой цвет . Если присвоенный ц вет не является чистым , то Windows генерирует псевдо полутоно вый цвет (полученный имитацией полутонов ). BOOL CreateSolidBrush (COLORREF crColor); Кроме того , для заливки вну тренней области фигур можно инициализировать кисть , вызвав функцию CreateHatchBrush класса Cbrush. BOOL CreateHatchBrush (int nindex, COLORREF crColor); Параметр nIndex задает узор . Параметр crColor оп исывает цвет линий штриховки. Функция CreatePatternBrush класса CBrush вызывает кисть для заполнения фигуры заданным узором. BOOL CreatePa tternBrush (CBitmap* pBitmap); Параметр pBitmap является указателем на об ъект растрового изображения . Ес ли фигура рису ется с помощью кисти , то ее внутренняя область полностью за полняется копиями растров ого изображения , размещаемыми одна возле друг ой . Объ ект растрового изображения создает ся и инициализируется . Задаём размер растрово го изображения равным 8х 8 пикселей. Если растровое изображение монохромное , т о Windows исп ользует текущие цвета текста и фона. Примечание Объект кисть (как и перо ) можно ини циал изировать при создании , передавая кон структору CBrush соответствующие параметры . Информация об этом - в следующих разделах справочной системы : Visual C++ Documentation, Reference, Microsoft Foundation Class Library and Templates, Microsoft Foundation Class Library, Class Library Reference, CBrush. Как только перо или кисть инициализированы , их выбирают в объекте к онтекста устройства с помощью функции SelectObject класса cdc . Для выбора пера вызовите функцию SelectObject, CPen* SelectObject (CPen* рРе n) ; гд е рРе n — указатель на объект-перо . Функция SelectObject возвращает указате ль на предыдущий объект-перо , выбранный в объекте контекс та устройства . Если перо ранее не выбирало сь , это будет временный объект пера , задан ного по умолчанию . Для выбора кисти вызыв ается функция SelectObject. CBrush* SelectObject (CBrush* pBrush); где pBrush — указатель на объект-кисть . Функция SelectObject возвращает указатель на ранее в ыбранную кисть . Если она ранее не выбирала сь , то это будет временный объект для заданной по умолч анию кисти. При вызове функции SelectObject для выбора пера или кисти нужно сохранить возвращаемый указат ель . После вызова графических функций для отображения выводимой информации с использование м пера или кисти (что описано далее в этой же главе ) удалите перо или кисть из объ екта контекста устройства и вызовите функцию SelectObject для выбора предыдущего объекта. Перо ил и кисть необходимо удалить из объекта кон текста устройства , чтобы объект контекста уст ройства не хранил некорректный дескриптор после уд аления объекта . При инициа ли зации пера или кисти Windows добавляет дескриптор , сохраняемый внутри объекта . При выборе пера или кисти объект контекста устройства такж е сохраняет этот дескриптор . Когда объекты выходят за пределы области видимости или удаляю тся , деструктор объекта унич тожает дескриптор . Однако этот шаг не нужно вы полнять , если объект контекста уст ройства уда ляется до удаления объекта пера или кисти. В моей программе будут рисоваться два эллипса , первый по формуле x 2 y 2 --- --- =1 ; a 2 b 2 а второй , по формуле x=a cos t y=b sin t Вот функция , которая рисует оба эллипса : void CEllipseView::OnDraw(CDC* pDC) CEllipseDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); float x, y, t, PI = 3.1415926; for (x = -pDoc->A; x < pDoc->A; x+=0.005) y = sqrt(abs((1.0 - (x*x)/(pDoc->A*pDoc->A))*(pDoc->B*pDoc->B))); pDC->SetPixel(x*5+pDoc->A*5+10, y*5+pDoc->B*5+10, RGB(0xFF,0,0)); y = -sqrt(abs((1.0 - (x*x)/(pDoc->A*pDoc- >A))*(pDoc->B*pDoc->B))); pDC->SetPixel(x*5+pDoc->A*5+10, y*5+pDoc->B*5+10, RGB(0xFF,0,0)); for (t = -PI; t < PI; t+=0.005) x = pDoc->Ac * cos(t); y = pDoc->Bc * sin(t); pDC->SetPixel(x*5+MAX(pDoc->A,pDoc->Ac)*15+20, y*5+MAX(pDoc->B,pDoc->Bc )*5+10, RGB(0,0x20,0x80)); Для передачи параметров в функцию рисования я создал два диалоговых окна , одно для первой формулы (первого эллипса ), другое – для второй формулы (в торого эллипса ). При нажатии на иконки элл ипсов появляются эти диалоговые окн а и предлагается ввести соответствующие параметры формулы эллипса . Диалоговые окна вызываются в файле EllipseDoc.Cpp , вот функции вызова обоих диалого вых окон : void CEllipseDoc::OnNewEllipseProperties() CEditEllipseProperties dlg; dlg.m_A = A; dlg.m_B = B; dlg.DoModal(); A = dlg.m_A; B = dlg.m_B; UpdateAllViews(NULL); void CEllipseDoc::OnEditEllipseProperties2() CEditEllipseProperties dlg; dlg.m_A = Ac; dlg.m_B = Bc; dlg.DoModal(); Ac = dlg.m_A; Bc = dlg.m_B; UpdateAllViews(N ULL); Глава 3.Печать и предварительный просмотр 1)Основы печати и предварите льный просмотр 2)Усовершенствованная печать В этой главе я объясню , как выполняется печать текстов и графическ их изо бражений , а также предварительный просм отр внешнего вида до кумента перед печ атью . А также , как выполняются стандартные команды Print ..., Print Preview и Print Setup из меню File . Так как в Windows применяется модель вывода данных , не зависящая от устройств , для отображения тек ста и графики на печатной страни це мо жно использовать уже известные вам сп особы . Рассмотрим особые способы печати - выбор и установку принтера , разбиение документа на страницы и другие действия , необходимые для работы принтером. Прежде всего рассмотрим как обеспечиваетс я поддержка печати , поз воляющая програм ме печатать или предварительно просматривать од ну страницу . Показаны более со вершенные спосо бы печати или просмотра страниц документа , который не поме щается на одну страницу . Примеры добавления средств поддержки печати и пред варительно г о просмотра приве дены в программе . Основы печати и предварительный просмотр При генерации новой программы с испол ьзованием мастера AppWizard , в нее можно включить основные средства поддержки печати и предварительного про смотра , установив опцию Printing And Print Preview в диалоговом окне ( Step 4) AppWizard , в следствие чего команды Print ..., Print Preview и Print Setup ... добавляются в меню программы File . При реализации мастером AppWizard команда Print ... печатает ту часть документа , которая помещается на одной страни це . Оставшаяся часть документа игнорируется . Подобным образом команда Print Preview отображает р аспечатку , появляющуюся на одной странице док умента . Как вы увидите , команды Print ... и Print Preview вызывают фун кцию OnDraw , чтобы сгенериро вать реально выводимую тек стовую или графическую информацию . Команда Print Setup ... отображает о бычное диалоговое окно Print Setup , позво ляющее выбрать тип принтера и задать его установки. В этом разделе в мою программу Ellipse добавлены все средства печа ти , позво ляющее печ атать так же , как и при выборе опции Printing And Print Preview в первом варианте программы , сгенерированном мастером AppWizard . В нов ую версию моей программы Ellipse включены все средства , которые вошли в программу. Модификация ресурсо в Чтобы отобразить ресурсы программы , перед началом модификации ресурсов откроем проект Ellipse и вкладку Resource View в окне Workspace . Затем откроем меню idr _ mainframe в к онструкторе меню . Непосредственно под существующе й командой Save As ... в меню File добавляем разделитель и команды Print ..., Print Preview и Print Setup .... Откроем в редакторе акселераторов таблицу idr _ ma in frame , чтобы задать кл авиатурный акселератор для команды Print ... ( Ctrl + P ). Добавим аксел ератор с идентификатором id _ file _ print и комбинацией клавиш Ctrl+P. Теперь необходимо включить в файл опр еделения ресурсов Ellipse некоторые дополнительные предопределе нные ресурсы . Для этого выбираем команду Resource Includes ... в меню View Developer Studio. В диалоговом окне Resource Includes д обавля ем конце текста в поле Compile-Time Directives следующую строку : #include "afxprint.re" Щелкаем на кнопке ОК , а после запроса Developer Studio подтверждаем свои действия . Добавление этой строки предписывает компилятору ресурсов добавить их опре деле ния , содержащиеся в списке Afxprint . rc , которые задают несколько ресурсов , используемых для поддержки команд Print ... и Print Preview программы (например , диалоговое окно Printing , отображае мое во время печати ). Модификация текста программы Первый шаг моди фикации текста про граммы состоит в создании обработчика для новой команды Print Setup ..., добавленной в меню File . Его не нужно писат ь самостоятельно , так как класс cwinApp предоставляет обработчик , называемый OnFilePrintSetup . Однако MFC не добавляет его в схему сообщений , т . е . теку щая фу нкция не получает управление при выборе к оманды Print Setup ... Следова тельно , его необходимо вручную добавить в схему сообщений класса приложения Ellipse . Для этого откроем файл Ellipse . cpp и добавим операторы , выделен ные полужирным шрифтом , в определение схемы обработки со общений. //////////////////////////////////////////////////////////////// // Класс CMiniDrawApp BEGIN_MESSAGE_MAP(CMiniDrawApp, CWinApp) // AFX_MSG_MAP(CMiniDrawApp) //-Входы ' схемы обработки сообщ ений мастера ClassWizard ... // AFX_MSG_MAP // Команды работы с файлами документов • ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) ON_COMMAND (ID_FILE_PRINT_SETUP, CWinApp: : OnFilePrintSetup) END MESSAGE MAP() Новая запись в схеме сообщений привод ит к тому , что при выборе команды PrintSetup ... будет в ызываться функция CWinApp:: OnFilePrintSetup. Функция ' OnFilePrintSetup отображает диалоговое окно PrintSetup , в котором нужно выбрать тип п ринтера и установить е го параметры . Эт о все , что необходимо для поддержки команд ы PrintSetup ... Подобным образом класс cview предоставляет обработчики сообщений для стандартных команд меню Print и Print Preview. Эти обработч ики необходимо активировать , добавив их в схему сообще ний для класса представления программы Ellipse . Откроем файл Ellipse . cpp и добавим следующие две записи в конце схемы обработки сообщений. BEGIN_MESSAGE_MAP(CEllipse,CScrollView) // (AFX_MSG__MAP(CEllipse) ON_WM_LBUTTONDOWN() ON_WM_MOUSEMOVE() ON_WM_LBUTTONUP() // AFX_MSG_MAP ON_COMMAND(ID_FILE_PRINT,CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView: : OnFilePrintEreview) END_MESSAGE_MAP() . Обе функции , CView:: OnFilePrint и CView: :OnFilePrintPreview, управляют операциями печати . Однако OnFilePrint передает результат на принтер , а функ ция OnFilePrintPreview — в окно предв арительного просмотра печати , отобра жаемое поверх обычного окна программы . При этом она показывает р езультат в виде одной или двух печатаемых страниц . В процессе уп равления печатью эти функции вызывают виртуал ьные функции , определенные внутри класса CView. Реа лизация виртуальных функций в классе CView по умолчанию наклады вает ограничение на процесс печ а ти . Для улучшения возможностей программы печати одну (или более ) из э тих функций можно переопределить. Чтобы реализовать поддержку печати или предварительного просмотра печати , необходимо п ереопределить только виртуальную функцию OnPreparePrinting . MFC выз ывает ее либо перед печатью , либо перед пре дварительным просмот ром . Чтобы создать функцию OnPreparePrinting для программы Ellipse , вызовите мастер ClassWizard , откроем вкл адку Message Maps , выберем CEllipse в списках Class Name и Object Ids , а в списке Me ssages — OnPreparePrinting и щелкнем на кнопке Add Function . Затем щелкн ем на кнопке Edit Code , в функции OnPreparePrinting удалим вызов основной версии функции OnPreparePrinting и добавим вызов функции CView:: DoPrepa - rePrinting . BOOL CEllipse:;OnPreparePr inting(CPrintInfo* pinfo) ( // TODO : Здесь добавьте собственный код о бработчика // и /или вызов базового класса return DoPreparePrinting (pinfo); // у далите вызо в // CScrollView:: OnPreparePrinting(pinfo) ) Функция DoPreparePrinting создает объект контекста устрой ства , связанный с принтером . Если документ печатается, то DoPreparePrinting отображает обычное диалоговое окно Print , позволяющее выбрать определенный принтер и установить несколько опций печати . Затем функция создает объект контекста устро йства дл я выбранного принтера и задае т для него выбранные установки . Однако при предварительном просмотре документа функция DoPreparePrinting создает объ ект контекста устройства для текущего стандар тного принтера Windows , а затем присваивает стандартные установки принтера , не отображая диалоговое окно Print . Если объект контекста устройства связа н с принтером , он дополни те льно сохраняет установки принтер а при сохранении атрибутов и инструментов рисования , описанных в предыдущих главах . Об ратите внимание : функцию O nPreparePrinting необходимо создать , так как ее стандартная вер сия ничего не выполняет . Это может привести к тому , что MFC по пытается напечатать или просмотреть документ без наличия корректного объекта контекста уст ройства. Примечание Указатель на объект к ласса cprintinfo передается во все виртуальные функции выпол нения печа ти . Этот объект содержит информацию о печа ти и предоставляет функции и переменные , к оторые используются виртуальными функциями для получения или изменения установок принтера . Например , если известен номер печатаемой страницы документа , то из функции OnPreparePrinting мо жно вызвать функцию Cprintinfo : : SetMaxPage перед вызовом DoPreparePrinting ), чтобы задать номер печатаемой ст раницы . Тогда при печати документа этот но мер отобразится в диалоговом окне Print (в текстов ом поле То ). При просмотре документа предо ставление этого номера приведет к отображению MFC полос ы прокрутки в окне предварительного просмотра , что позволит прокручивать страницы доку мент а . MFC долж но передаваться общее чис ло страниц д ля корректной установки позиции бегунка на полосе прокрутки . После того как MFC вызовет функцию OnPreparePrinting, чтобы п одготовить объект контекста устройства для пе чати или просмотра , она передает этот объе кт в функцию OnDraw класса предс тавления . Поскольку объект контекста устройства связывается с принтером, а не с окном представления , выводимая графическ ая информация появляется на печатаемой страни це (или в окне предварительного просмотра печати ), а не внутри окна представления . Ед инстве нная программа рисования внутри фун кции OnDraw имеет возможность отобразить выводимую информацию как в окне представления , так и при печати , поскольку вызываемые для этого функции класса CDC в достаточной степени аппара тно независимы. Примечание Когда доку мент печатается или про сматривается , MFC готовит объект контекста устройства , св язанный с принтером, и передает его в функцию OnDraw. Однако при просмотре доку мента код MFC в объекте контекста устройства фактически передается в окно предвари тельного прос мотра . При э том используется отдельный контекст устройства , который связан с окном представления и задает установки для имитаци и печатаемой страницы. Теперь можно построить и выполнить но вую версию программы Ellipse. Если выбрать команду Print Setup ..-, пр ограм ма открывает одноименное диалоговое окно , поз воляющее выбрать принтер , принимающий выводимую на печать информацию (если в Windows установлено несколько принтеров ), и задать некоторые его параметры . Щелчок на кнопке Properties ... в диалогов ом окне Prin t Setup позволяет получить доступ ко всем имеющимся установкам принтера (в зависимости от выбранного принтера ). При выборе команды Print ... программа откроет диа логовое окно Print . В диалоговом окне Print можно выбрат ь принтер , принимающий выводимую инфор мацию , и указать некоторые па раметры печати (качество печати и число ко пий ). Щелчок на кнопке Properties ... в диалоговом окне Print позволя ет изменить любой из доступных параметров принтера непосредственно перед печатью . Эти же параметры отображаются при щ елчке на кнопке Properties ... в диалоговом окне Print Setup . Если рисунок печатается не очень быстро , то во вре мя печати будет видно диалоговое окно Printing . В этом окне можно щелкнуть на кнопке Cancel , чтобы остано вить работу принтера . Если сделать это д о передачи Print Manager выводимой информации , то печать выполня ться не будет. Добавление средств печати в окно пред ставлений класса CEditView Если класс представления в программе наследуется из класса CEditVtew , то MFC и Windows предоставляют большую ч асть кода , требуемого для печати . Даже если в мастере AppWizard не была выбрана опция Printing and Print Preview , можно реализ овать команды Print ..., Print Preview и Print Setup самому , потратив небольшие усилия на программирование. Чтобы реализовать коман ду Print ..., просто доба вим ее в меню File , задав иден тификатор id _ file _ print _ preview , без дальнейшего изменения кода . Результи р ующая команда Print будет печатать весь текст докумен та , занимающий даже более одной страницы. Для реализации команды Print Preview добавим ее в меню File , присвоив иден тификатор id _ e ' ile _ print _ preview , затем добавим в схему сообщений оператор include для вставки файла Afxprint . rc и макрос on _ command для класса представления. Чтобы реализовать команды Print ... или Print Previe w , не нужно создавать функцию OnPreparePrinting . Усовершенствованная печать С добавленными средствами печати программ а Ellipse печ атает или про сматривает только часть рисунка , поместившуюся на одной странице . Оставшаяся часть рисунка игнорируется . В этом разделе возможности программы будут расши рены таким образом , чтобы она печатала весь рисунок . Любая часть рисунка , кото рая не п оместилась на одной странице , будет печататьс я на дополнительных . Как вы увидите , это достигается переопределением некоторых в ы зываемых при печати виртуальных функций. Заметим : текущая версия функции OnDraw всегда рисуе т границу справа и внизу рисунка . Однако граница служит только для ограничения ри сунка внутри окна представления . На печатной копии рисунка она не появляется . В эт о м разделе команда OnDraw модифицируется таким образом , что граница будет печататься тол ько в случае , если выводимая информация на правляется в окно представления. Изменение размера рисунка В программе Ellipse устанавливается размер рисунка 640 н а 480 пиксел ей . Для большинства принтеров рисунок такого размера легко помещается на одной странице . Чтобы продемонстрировать спо собы печати нескольких страниц , необходимо мо дифицировать программу Ellipse для работы с рисунками , разм еры которых превышают стандартную печатную страницу . Чтобы выполнить это , сначала оп ределим целочисленные константы для ширины и высоты рисунка в начале файла Ellipse . h . consfc int DRAWWIDTH = 4000; // ширина ри сунка const int DEAHHEIGHT = 6000; // высота р исунка class CEllipse : public CScrollView ( В функции OnlnitialUpdate файла Ellipse . cpp используем эти кон стан ты вместо числовых значений (640 и 480). void CEllipse::OnlnitialUpdate() ( // TODO : Здесь добавьте собственный код // и /или вызов базового класса SIZ E Size = (DRAHWTDTH, DBAWHEIGHT ; SetScrollSizes (MM_TEXT, Size) ; Использование констант drawwidth и drawheight вместо числовых значений облегчает изменение размера рисунка. При изменении размера рисунка необходимо изменить номер версии , исполь зуемый д ля сериализации документа , чтобы не пр очитать по ошибке файл , соз данный предыдущей версией (или , используя предыдущую версию программы , прочитать файл , созданный текущей в ерсией ). Для этого откроем файл Ellipse.cpp и измен им номер версии с 2 на 3 в каждо м вхождении макроса implement _ serial (мы должны найти восемь вхождений ). Например , мы должны изменить макрос IMPLEMENT_SERIAL (CFigure, CObject, 2) на IMPLEMENT_SERIAL (CFigure, CObject, 3) Примечание Программа рисования обычно позволяет уста навливать разм ер каждого рисунка чаще всего с помощью команды меню Options программы . Ес ли рисунок сохраняется в файле на диске , то его размер тоже будет сохранен вмес те с данными для отдельных фигур. Заключение. Столкнувшись впервые с Visual C++ , я испытал массу тру дностей , часть трудностей до сих пор не преодолена мной . Непривычность среды , да даже не среды , а вообще не знания визуального языка , и привычка писать на стандартных языках программирования C\C++, Pascal, Basic сделали мою работу очень медленной и сложной, даже та подробная литература , которая была у меня и которую я использовал практ ически неотрывно мало помогала . Прежде всего возникла масса вопросов , на которые книга не могла бы дать ответов . Сразу же возникла путаница со “слишком большим” (по моим мерка м ) количеством файлов , каждый из которых отвечает за определённые классы и функции и приходилось постоянно обращаться к литературе , чтобы понять и осмыслить назначение каждого класса и фа йла . Поиски литературы в интернете особых результатов не принесли , за т о я почерпнул массу полезных курсов (или уроков ) “молодого бойца” , которые во многом помо гли мне разобраться в этом непривычном на чинании . Имея некоторое знакомство с языком Visual Basic и проведя сравнение с Visual C++ , я бы сказал , что среда Visual C++ значительно сложнее для восприятия чем бейсик , хотя на то он и Basic (see english translation) особенно для во сприятия и самообучения . Несомненно нужен учи тель или хотя бы человек , который подсказы вал некоторые непонятные и труднопроходимые м оменты. Очень порадовали классы MFC , без них р абота была бы просто невыносимой . Многим м ожет показаться , что создание программы с помощью MFC это слишком просто и ничего особенного не представляет , но на самом деле это довольно сложно , хотя со временем очень пр ивыкаешь и без труда пользуешься этим удобным “инструментом”. Надеюсь , в недалёком будущем я разб ерусь в среде Visual C++ более подробно и досконально и у меня уже не будет такого огромного количества трудностей , как при первых шаг ах в Visual C++.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
На лавочке возле калитки сидят и беседуют две бабки. Мимо них проходит пьяный в стельку мужик.
Одна бабка - другой:
- У Петровых каждый знает своё дело: она гонит самогон, а он его рекламирует.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по программированию "Visual C++ 6", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru