Documente Academic
Documente Profesional
Documente Cultură
Crearea Unei Aplicaţii Windows: Etapa 1. Tip Aplicaţie
Crearea Unei Aplicaţii Windows: Etapa 1. Tip Aplicaţie
VC++ nu compileaz numai cod ci i genereaz cod. Pentru generarea unei aplicaii se folosete AppWizard.
n primul rnd aici se lucreaz cu proiecte. Un proiect poate conine mai multe aplicaii.
Pentru a crea un proiect vom folosi comenzile File->New->Projects. Din lista prezentat n pagina (tab-ul) Projects
vom selecta MFC AppWizard (EXE), selectm locul unde va fi memorat pe HDD i apoi completm numele
proiectului. Dup acest lucru va trebui s completm o serie de informaii grupate pe etape.
O aplicaie single document interface (SDI), are numai un document deschis la un moment dat. Cnd
selectm File->Open, fiierul existent i care este deschis va fi nchis nainte ca s se deschid noul
document.
O aplicaie multiple document interface (MDI), cum ar fi Excel sau Word, poate deschide mai multe
documente odat. Dac dorim vizualizri multiple pentru un document va trebui s construim o aplicaie
MDI.
O aplicaie dialog-based, cum ar fi utilitarul Character Map. Aplicaiile nu au meniu.
OBSERVAIE:: Aplicaiile bazate pe dialog sunt diferite de cele de tip SDI sau MDI.
Vor fi tratate n mod separat.
Mai exist un checkbox care ne d posibilitatea de a indica dac dorim suport pentru arhitectura Document/View.
Opiunea se folosete n special pentru portarea aplicaiilor dintr-un alt sistem de dezvoltare. Nu o vom folosi.
Dac dorim o aplicaie care s conin obiecte ActiveX nglobate sau legate, cum ar fi aplicaia Word,
alegem Container.
Dac dorim ca aplicaia noastr s furnizeze obiecte, care pot fi nglobate, pentru alte aplicaii, dar aplicaia
s nu poat fi executat separat (stand alone), vom alege Mini Server.
Dac dorim ca aplicaia noastr s furnizeze obiecte, care pot fi nglobate, pentru alte aplicaii, i aplicaia
s poat fi executat separat (stand alone), vom alege Full Server.
Dac dorim ca aplicaia s ncorporeze opiunile 3 i 4 vom selecta Both Container and Server.
Dac alegem suport pentru documentele compuse vom avea i suport pentru fiiere compuse (compound files).
Fiierele compuse conin unul sau mai multe obiecte ActiveX i sunt salvate ntr-un mod special astfel nct un
obiect poate fi modificat fr a rescrie ntregul fiier. Pentru acest lucru facem o selecie pe unul din butoanele radio
Yes, Please, sau No, Thank You.
Tot n aceast pagin ne hotrm dac aplicaia suport automatizare sau va folosi controale ActiveX.
Printing and Print Preview. Aplicaia va avea opiunile Print i Print Preview din meniul File, i o parte
din codul necesar va fi generat de AppWizard.
Context-Sensitive Help. Meniul Help va avea opiunile Index i Using Help, i o parte din codul necesar
pentru a fi implementat Help va fi generat de AppWizard. Aceast decizie este dificil de luat mai trziu
pentru c pri din cod sunt generate n diverse locuri din cadrul aplicaiei.
3D Controls. Aplicaia va arta ca o aplicaie obinuit Windows 95. Dac nu selectm aceast opiune,
boxele de dialog vor avea background alb i nu vor fi umbre n jurul boxelor de editare, checkbox-urilor i
alte controale.
MAPI(Messaging API). Aplicaia va avea posibilitatea de trimite fax-uri, email-uri i alte mesaje.
Windows Sockets. Aplicaia va putea accesa Internet-ul n mod direct, folosind protocoale ca FTP i HTTP
(protocolul World Wide Web).
Putem seta de asemenea numrul fiierelor din lista MRU. Implicit acest numr este 4.
Butonul Advanced activeaz dou tab-uri (Document Template Strings, Window Styles) unde putem schimba
numele aplicaiei, titlul ferestrei cadru, extensia fiierelor folosite n File->Open, etc.
Prporpietile care pot fi setate pentru ferestrele cadru:
Thick Frame. Dac nu o selectm se previne redimensionarea.
Minimize Box.
Maximize Box.
System Menu.
Minimized. Cadrul este minimizat cnd aplicaia este lansat n execuie. Pentru aplicaiile SDI, aceast
opiune va fi ignorat cnd aplicaia ruleaz sub Windows 95.
2
Maximized. The frame is maximized when the application starts. For SDI applications, this option will be
ignored when the application is running under Windows 95.
Alte Opiuni
Dorim biblioteca MFC s fie legat ca un DLL partajabil sau n mod static? Un DLL este o colecie de funcii
utilizate de diferite aplicaii. Folosirea DLL-urilor face ca programul s fie mai mic dar mai greu de instalat. Dac
legtura este static crete mrimea programului dar nu mai sunt probleme deosebite cu instalarea.
Custom AppWizard
Se folosete n general pentru a crea noi proiecte din altele existente (se copie cod, help, etc.).
Database Project
Dac avem instalat Enterprise Edition of Visual C++, putem crea un proiect de baze de date.
Makefile
Dac dorim s crem un proiect care este utilizat cu un alt utilitar make diferit de Developer Studio, vom selecta
aceast opiune. Nu se genereaz cod.
Win32 Application
Se creaz o aplicaie obinuit n C++.
#endif //!
defined(AFX_FIRSTSDI_H__CDF38D8A_8718_11D0_B02C_0080C81A3AA2__INCLUDED_)
#ifndef acioneaz ca n codul care urmeaz,i are ca efect includerea fiierului ce urmeaz o singur dat.
#ifndef test_h
#include "test.h"
#define test_h
#endif
#pragma once este de asemenea pentru a preveni definiiile multiple dac acest fiier este inclus de dou ori.
Clasa CFirstSDIApp derivat din CWinApp, furnizeaz cea mai mare funcionalitate a aplicaiei. Instana
acestei clase constituie obiectul aplicaie. AppWizard a generat anumite funcii pentru aceast clas care reacoper
funciile motenite din clasa de baz. Aceast seciune de cod ncepe cu //Overrides. De asemenea sunt generate
annumite comentarii care ajut la nelegerea codului. n aceast seciune vom gsi declaraia pentru funcia
InitInstance(). Urmtoarea seciune de cod este pentru harta de mesaje.
AppWizard genereaz cod pentru constructorul CFirstSDIApp, i funciile InitInstance() i OnAppAbout() n fiierul
firstsdi.cpp. Codul generat pentru constructor arat astfel:
CFirstSDIApp::CFirstSDIApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
Ca regul general trebuie reinu c Microsoft construiete obiectele n doi pai. Se creaz obiectul unde se scrie
cod care sigur se execut corect, iar iniializrile se fac cu ajutorul unei funcii membru, care poate indica dac
acestea au fost efectuate cu succes sau nu. Constructorul nu ntoarce nici o valore, construiete obiectul.
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CFirstSDIDoc),
RUNTIME_CLASS(CMainFrame),
// main SDI frame window
RUNTIME_CLASS(CFirstSDIView));
AddDocTemplate(pDocTemplate);
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
Comentariile sunt incluse de AppWizard. InitInstance este apelat prima la lansarea apliaciei.
AfxEnableControlContainer() permite aplicaiei de a conine controale ActiveX. Se permite afiarea
controalelor cu aspect 3D.
Se completeaz regitrii sub care va fi nregistrat aceast aplicaie.
InitInstance() nregistreaz n continuare ablonul de document care este SDI n acest caz.
InitInstance() creaz un obiect vid (neiniializat) CCommandLineInfo pentru a menine parametrii pasai
aplicaiei prin linia de comand cnd aceasta a fost lansat n execuie i apoi apeleaz ParseCommandLine()
pentru a completa acest obiect. n final se proceseaz linia de comand printr-un apel la
ProcessShellCommand(). De exemplu dac lansm aplicaia din linia de comand astfel: FirstSDI fooble,
aplicaia va deschide fiierul fooble.
Parametrii din linia de comand pe care ProcessShellCommand() i suport sunt urmtorii:
Parameter
None
Filename
/p filename
/pt filename printer driver port
/dde
/Automation
/Embedding
Action
Start app and open new file.
Start app and open file.
Start app and print file to default printer.
Start app and print file to the specified printer.
Start app and await DDE command.
Start app as an OLE automation server.
Start app to edit an embedded OLE item.
Dac dorim s implementm o alt comportare, vom construi o clas derivat din CCommandLineInfo pentru a
pstra linia de comand, i apoi rescriem funciile CWinApp:: ParseCommandLine() i
CWinApp::ProcessShellCommand().
7
Se completeaz variabila m_pMainWnd cu adresa obiectului aplicaiei, variabil ce este defintn CWinThread,
ce este clas de baz pentru CWinApp.
La sfrit funcia ntoarce TRUE pentru a indica c restul aplicaiei poate rula.
Harta de mesaje indic c funcia OnAppAbout() va trata un mesaj. Care este? Va trata comanda de meniu care
are ID-ul ID_APP_ABOUT. Acest ID corespunde comenzii de meniu Help->About.
Descrierea hrii de mesaje este:
BEGIN_MESSAGE_MAP(CFirstSDIApp, CWinApp)
//{{AFX_MSG_MAP(CFirstSDIApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// NOTE - The ClassWizard will add and remove mapping macros here.
//
DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard file-based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
OnAppAbout() arat aa:
void CFirstSDIApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
Se construiete obiectul aboutDlg, care este o box de dialog, i apoi se execut acest dialog.
//{{AFX_VIRTUAL(CFirstDialogApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CFirstDialogApp)
// NOTE - The ClassWizard will add and remove member functions here.
//
DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately
// before the previous line.
#endif // !defined(AFX_FIRSTDIALOG_H__CDF38DB4_8718_11D0_B02C_0080C81A3AA2
__INCLUDED_)
11