Table Of ContentВ.М. СНem:JБ
Практикум прикладного
программирования на МРС и С++ в среде
VS.NET
2-е издание, исправленное
Снетков В.М.
Национальный ОжРЬПЫЙ Университет "интуит"
2016
,
В.М. CHem:JB Пракmкум приклцного прогр"-,,мирования на MFC н С. + в среде VS.NET
Пракшкум прикладного программирования иа MFC и С++ в среде VS.NEfI В.М.
CHe1"КDB -М.: Нациоиальный ОткРЫ1ЫЙ Университет "ИНТУИТ", 2016
В курсе представлены лабораторные раБOlЫ, Ю)торые были подготовлены ДfIЯ
сryдентов сразу после появления VS.NEf 2003. Материал базируется на применении
MFC и С++. НеЮ)торые работы используют VCLC++Builder.
Содержание курса oxвa1ыветT различные аспеКlЫ программирования оконных
приложений на иеуправляемом С++. На учебных примерах описываются технологии
разрабопш пользовательских библиотек и приложений в средах проекшрования
VS.NEf 2003 и, 01'JаСП1, C++Builder 6.0. Большое внимание уделено применению
ИНС1рументов новой, иа тот момеит, оболочки VS.NEf, Ю)торые в современных
версиях в основе своей остались прежними. Несмотря на то, что в последних выпусках
библиотека MFC сущеClВенно увеличила свою мощь, базовые принципы ее
использования сохранились. поэтому представленный в курсе материал не потерял
свою акryальиоClЪ и может быlЪ использован (возможно, с иезначительными
дораБOl1(ами) ДfIЯ иачального обучения программированию.
(с) 000 "ИНТУИТ.РУ", 2010-2016
(с) Cнe1"КDB В.М., 2010-2016
в.м. CHem:JB Пракmкум приклцного прогр"-,,мирования на MFC н С. + в среде VS.NET
MFC
5DI-приложение
В первой лекции вы изучите, что такое 5DI и MDI приложения.
Выполните конструирование данных класса документа и класса
представления. Для практической значимости выполните: отображение
круга на экране, рисование круга в произвольной точке экрана.
Сохранение и загрузка данных Документа. Изменение заголовка окна
приложения и назначение фильтра. Изменение иконки приложения.
Русификация меню. Текст в центре клиентской области.
Спецификация задачи
Файлы к данной лабораторной работе, Вы можете скачать здесь скачать:
http://Oи . iпtШ. ruld epartment/se/p пnfсv/ 1 /р го gram. пр.
1. При запуске SDI -приложения внyrри окна представления в
20
точке х=200 , у=100 должен появиться круг радиусом
пикселов.
2.
Круг перерисовывается с центром в месте щелчка мыlШf.
з. Можно сохранить круг в файле и считать его на экран.
4.
Предусмотреть возможность печати круга на принтер.
s.
Основные пункты меню должны дУблироваться кнопками на
панели инструментов.
б. Пункты меню необходимо русифицировать.
7. Оформить требуемые подсказки в строке состояния главного окна
рамки и всплывающие подсказки.
8.
Вывести текст в центре окна документа.
Приступим К решению поставленной задачи.
Создание заготовки приложения
• ~ Командой меню Fi le/New/Project вызовите окно
мастера создания заготовки, выберите место размещения и
задайте имя проекта С i r с 1 е
,
В.М. CHem:JB Пракmкум приклцного прогр"-,,мирования на MFC н С. + в среде VS.NET
.lJ~
,",',"'''',',",',''''''';:o;o'''''',--__ 11 [iI
,';orrvЫeo:
=rms IntellQэrrn А"О)ЮS QR cmsole p'«cltatOO
IiIYISL;3I~t !!!IAТL Pro.>J(1
$ У;ш"J С# u::t'~ofio> R-o)1ct
ffi Yi"", J#
liI Y;,u,! С+ + ~Tl Sm,.-t Dov>:o есОрсl
liI о ...... R-ojoct TrP'" ~ E"l'tr Pro,~[t
:t=мoe Д:~veX Ш-!Jоl
,~м=c Srrar! ce'~e Ас!"", Cct11:fol
Ам=е s.-r...! Do'~~ CLl
~..,32 Smor!C<3'~~ РсОjoc!
.lf'ВI'IO:icbw' 5er;~o
,пh Onlho To"l'''tw"
LocatOO: "-О\Olm"
::::J
Icro.1:o now Sou!bn Г Croote ct,ocbry for юutbn
~u'iOn~~:D' ГIС.~~~~----
• r;;;r
Установите вюыДку Application Туре мастера MFC
Appli cation Wizard в указанное состояние генерации SDI
приложения
И-С Аррl<оtiоп Wi,ord Corc!e
'.0'.; .',
Applic<dkm Typ~
чрtа00f11}ор8' ProjEC!sЦle:
~~\:atOO TJP3 r. :>;-,ge dccL.-r..-:t r \','mc.., E1I'n"
Ccщ>cLrd ~! SLp:or\ rt!JJtple~ts r.""'C~d
="~"" Terцclate 51:frq3 r Q.i.~b.""d
s'-',)pCrt U""of~C
D,ru,эо Г <со ~r." 1'1">] (о "'О и=е .., ~ ,h..-od CLl
u""г н..-f,ю, Fodll.", r
UЭ!: мое.., ~ ,t>,~ Ih""l
ACt';n:oo F8a1fe<
Gooor3'Od С!;;С"""
C"",~I
в.м. CHem:JB Пракmкум приклцного прогр"-,,мирования на MFC н С. + в среде VS.NET
• [;$'
Состояние остальных ВЮIaДОК пусть останется
установленным по умолчанию, а име,н~н;;о;;:=====::::::=:..,;~
И-С Аррl<оtiоп Wi,ord Corcle !!!! .1J~
D"tab"a;e Support
D"taba93 sц:p:<1:
.o.pplcatoo Туре (."~
Ccщ>c<.rd Doo.xnent SLp:ort (" fieЮ3" (*" "'~
=U~"" Terrpam 5trrq3 (" D.G!b,,"o ~iow w,1tJootfik> o~
Do\>t.±.e 5.+Р<>! (" oa~ ,~". w;tl, fle щ:p:f1
u,..,.-h!:!>-Г~F"d!l.<""
A"';n:OO FeaVes
Gooor3'Od CI;>O<<><
Со"," СЕ.
~',;., ff.mo oty~:
р Ih~, ij-ycc
Р MГjrr)>E to:
PM~"'rI'" ь",
r M!:im;:ed
Гма!I'r~Ю
Ps.\'"",m"""",
Р Abcct!;oo: r '''"
(." SQ"dard lIxll1Q
Pht,,"S~bif
r Si1ltwnoo," Г Вra,;:= ct)k>
HaMFC нС.+
0,. ...... '_ A(N,.-.:OO reаы-ез' nt:IJrr IJe< 01 nles ()f1 roc""t (., I~t:
.'.pplc,",oo Туре Г =te,t-ш-ыr.e~"
Ссщ>сcrdDoo.xnentSLp:ort r Yl<nHolpf:O-rr« ,""",-пnr~,
" H~~ ~oj~ Foт-rn.!
D,ru,зо SL>,>PCrt р EYnt,-,. dПd prnt P""~
".",... h'и"f.юо F.""".", Г A~toOl..tbn
Р A<:t~"X aJ"ЦoI,
Г МАР! (/-'<><'"'3"'3 АР!)
Г ~sю;:kе:s
Г Actwo 6o:o"Ibii'i
Р СОm'Юl = 1fol Wi<lIE t
На последней вкладке цифра 4 означает размер списка последних
обработанных документов.
• 1;$ Просмотрите все вкладки мастера и нажмите кнопку
F i n i s h, чтобы мастер создал заготовку приложения
• 1;$ в раскрывающемся списке Solution Configur ations
поменяйте режим работы оболочки с Debug на Release, чтобы
ОТЮlючить генерацию отладочного кода при сборке проекта
• 1;$ Запустите заготовку, созданную мастером, на компиляцию и
Buil d/Bui ld Solut ion,
линковку командой а затем на
Debug/Start Debugging (F5)
выполнение командой
Windows
Появится полноценное окно с однодокументным
интерфейсом ( SDI )
,
в.м. CHem:JB Пракmкум приклцного прогр"-",,ирования на MFC н С. + в среде VS.NET
~. Untitled - Circle - о 2>.J
Fie Edit Viw€ ~
Ready
Конструирование данных класса документа
в массе документа нам нужно добавить поля, в которых будуг
храниться координаты центра БУдущего круга .
• r;;;r
Вызовите панель View/Soluti on Expl orer и в дереве
файлов проекта двойным щелчком откройте на редактирование
заголовочный файл Circ l eDoc . h
• 1;$ Найдите объявление масса CCircl eDoc и добавьте в него
объявления полей, которые будуг хранить координаты центра
круга
Объявления полей в массе документа CCircleDoc
class CCircleDoc : public CDocument
{
protected: 11 create fгoт sегializatiоп опly
CCircleDocO;
,
В.М. CHem:JB Пракmкум приклцного прогр"-,,мирования на MFC н С. + в среде VS.NET
DECLARE_DYNCREAТE(CCirc!eDoc)
11 Аttгшutеs
риыic:
iпt ш_РоsХ; 1/ координата х (по горизонтали) центра круга
iпt m_PosY; // координата у (по вертикали) центра круга
I/ Operations
риЬlic:
)
в объявлении класса язык С++ не допускает инициализацию членов
данных (кроме перечисления епит ). Поэтому инициализацию
поместим в функцию-член масса, которая выполняется при создании
нового документа. Для этого
• r;;:.--
В раскрывающемся списке Functions in CCircleDoc
(сведения о CCircleDoc ) выберите функцию-метод
OnNewDocument()
Именно функция OnNewDocument () срабатывает при создании
.
нового документа
• U$ Внесите в функцию OnNewDocument () код инициализации
объявленных координат круга
Инициализация полей в функции ОnNеwDосшnепtО масса CCirc!
BOOL CCircleDoc::OnN еwDосumeпtО
{
if (!СDосшnепt::ОnN еwDосumeпtО)
геtшп FALSE;
1/ ТООО: add геinitializatiоп code here
1/ (SDI documents will reuse this document)
ш_РоsХ = 200;
ш_РоsУ = 100;
,
В.М. CHem:JB Пракmкум приклцного прогр"-,,мирования на MFC н С. + в среде VS.NET
return
ТRUE;
)
Конструирование данных класса представления
Схема "Документ-Представление" реализует отношение "один ко
многим", т.е. одни и те же данные класса Документа можно по разному
отображать пользователю в классах Представления. В нашем случае
будет только одно представление данных Документа. Класс
Представления ее i r с 1 е Vi ew будет выполнять непосредственное
взаимодействие с пользователем и в нем тоже понадобятся поля для
хранения координат центра круга.
• [j.$' Через панель Solution Explor e r откройте
заголовочный файл eircleView . h, найдите объявление класса
eCircleView и внесите в него объявления переменных
членов, которые будуг хранить координаты центра круга
Объявления полей в классе представления CCircleView
class CCircleView : public CView
(
protected: 11 create fгoт serialization опly
CCircIeVJt'wO;
DECLARE_DYNCREAТE(CCirc!eView)
11 Аttrшutеs
риыic:
CCircleDoc* GetDocument() const;
int m_PosX; 11 координата х (по горизонтали) центра круга
int m_PosY; 11 координата у (по вертикали) центра круга
II Operations
риЬlic:
) ;
Значения полей, хранящих координаты центра круга, в классе
Документа и в классе Представления всегда должны совпадать, поэтому