Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Crearea unei aplicatii Windows

windows


Crearea unei aplicatii Windows

VC++ nu compileaza numai cod ci si genereaza cod. Pentru generarea unei aplicatii se foloseste AppWizard.

În primul rând aici se lucreaza cu proiecte. Un proiect poate contine mai multe aplicatii.

Pentru a crea un proiect vom folosi comenzile File->New->Projects. Din lista prezentata în pagina (tab-ul) Projects vom selecta MFC AppWizard (EXE), selectam locul unde va fi memorat pe HDD si apoi completam numele proiectului. Dupa acest lucru va trebui sa completam o serie de informatii grupate pe etape.



Etapa 1. Tip aplicatie

În etapa 1 (pas 1) vom selecta tipul aplicatiei (se alege interfata cu utilizatorul). Avem urmatoarele posibilitati:

O aplicatie single document interface (SDI), are numai un document deschis la un moment dat. Când selectam File->Open, fisierul existent si care este deschis va fi închis înainte ca sa se deschida noul document.

O aplicatie multiple document interface (MDI), cum ar fi Excel sau Word, poate deschide mai multe documente odata. Daca dorim vizualizari multiple pentru un document va trebui sa construim o aplicatie MDI.

O aplicatie dialog-based, cum ar fi utilitarul Character Map. Aplicatiile nu au meniu.


OBSERVAŢIE:: Aplicatiile bazate pe dialog sunt diferite de cele de tip SDI sau MDI. Vor fi tratate în mod separat.


Mai exista un checkbox care ne da posibilitatea de a indica daca dorim suport pentru arhitectura Document/View. Optiunea se foloseste în special pentru portarea aplicatiilor dintr-un alt sistem de dezvoltare. Nu o vom folosi.

Etapa 2. Baze de date

În aceasta etapa vom alege nivelul pentru suportul bazelor de date.

Exista patru posibilitati:

Pentru aplicatii fara baze de date vom selecta None.

Daca dorim sa avem acces la baze de date dar nu dorim sa derivam vizualizarea din CFormView sau sa nu avem meniu Record vom selecta Header Files Only.

Daca dorim sa derivam vizualizarea din CFormView si sa avem meniul Record dar nu dorim sa serializam documentul, vom selecta Database View Without File Support.

Daca dorim suport pentru baze de date si în plus dorim si salvarea documentului vom selecta Database View With File Support.

Daca selectam ultima optiune, va trebui sa indicam sî sursa de date - butonul Data Source.

Etapa 3. Suport pentru documente compuse

Tehnologia ActiveX si OLE este referita ca fiind tehnologia documentului compus (compound document technology).

În aceasta etapa exista cinci posibilitati:

Daca nu scriem o aplicatie ActiveX, alegem None.

Daca dorim o aplicatie care sa contina obiecte ActiveX înglobate sau legate, cum ar fi aplicatia Word, alegem Container.

Daca dorim ca aplicatia noastra sa furnizeze obiecte, care pot fi înglobate, pentru alte aplicatii, dar aplicatia sa nu poata fi executata separat (stand alone), vom alege Mini Server.

Daca dorim ca aplicatia noastra sa furnizeze obiecte, care pot fi înglobate, pentru alte aplicatii, si aplicatia sa poata fi executata separat (stand alone), vom alege Full Server.

Daca dorim ca aplicatia sa încorporeze optiunile 3 si 4 vom selecta Both Container and Server.

Daca alegem suport pentru documentele compuse vom avea si suport pentru fisiere compuse (compound files). Fisierele compuse contin unul sau mai multe obiecte ActiveX si sunt salvate într-un mod special astfel încât un obiect poate fi modificat fara a rescrie întregul fisier. Pentru acest lucru facem o selectie pe unul din butoanele radio Yes, Please, sau No, Thank You.

Tot în aceasta pagina ne hotarâm daca aplicatia suporta automatizare sau va folosi controale ActiveX.


OBSERVAŢIE: Daca dorim ca aplicatia sa fie un control ActiveX, nu trebuie sa cream o aplicatie .exe obisnuita. Crearea controlului ActiveX se face selectând o alta optiune din Projects.


Etapa 4. Optiuni pentru interfata. Alte Optiuni

Urmatoarele optiuni afecteaza modul de afisare al interfetei:

Docking Toolbar. AppWizard pregateste un toolbar. Acesta poate fi editat (adaugare, modificare, stergere).

Initial Status Bar. AppWizard creaza o bara de stare care afiseaza mesajele atasate comenzilor din meniu sau alte mesaje specifice aplicatiei.

Printing and Print Preview. Aplicatia va avea optiunile Print si Print Preview din meniul File, si o parte din codul necesar va fi generat de AppWizard.

Context-Sensitive Help. Meniul Help va avea optiunile Index si Using Help, si o parte din codul necesar pentru a fi implementat Help va fi generat de AppWizard. Aceasta decizie este dificil de luat mai târziu pentru ca parti din cod sunt generate în diverse locuri din cadrul aplicatiei.

3D Controls. Aplicatia va arata ca o aplicatie obisnuita Windows 95. Daca nu selectam aceasta optiune, boxele de dialog vor avea background alb si nu vor fi umbre în jurul boxelor de editare, checkbox-urilor si alte controale.

MAPI(Messaging API). Aplicatia va avea posibilitatea de trimite fax-uri, email-uri si alte mesaje.

Windows Sockets. Aplicatia va putea accesa Internet-ul în mod direct, folosind protocoale ca FTP si HTTP (protocolul World Wide Web).

Putem seta de asemenea numarul fisierelor din lista MRU. Implicit acest numar este 4.

Butonul Advanced activeaza doua tab-uri (Document Template Strings, Window Styles) unde putem schimba numele aplicatiei, titlul ferestrei cadru, extensia fisierelor folosite în File->Open, etc.

Prporpietatile care pot fi setate pentru ferestrele cadru:

Thick Frame. Daca nu o selectam se previne redimensionarea.

Minimize Box.

Maximize Box.

System Menu.

Minimized. Cadrul este minimizat când aplicatia este lansata în executie. Pentru aplicatiile SDI, aceasta optiune va fi ignorata când aplicatia ruleaza sub Windows 95.

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 Optiuni

Dorim biblioteca MFC sa fie "legata" ca un DLL partajabil sau în mod static? Un DLL este o colectie de functii utilizate de diferite aplicatii. Folosirea DLL-urilor face ca programul sa fie mai mic dar mai greu de instalat. Daca legatura este statica creste marimea programului dar nu mai sunt probleme deosebite cu instalarea.

Etapa 6. Numele fisierelor si al claselor

Ultima etapa stabileste numele claselor si fisierelor create de AppWizard. Putem schimba aceste nume. Daca aplicatia include o clasa pentru vizualizare, care în mod obisnuit este derivata din CView, putem schimba clasa de baza, de exemplu CScollView sau CEditView care ofera o functionalitate sporita vizualizarii.

Vom apasa butonul Finish pentru terminarea generarii aplicatiei.

Urmeaza exemple de creare aplicatii pentru fiecare tip în parte.

Crearea DLL-urilor, Aplicatiilor de tip Consola

Alte optiuni ce se regasesc în tab-ul Projects:

ATL COM AppWizard

Custom AppWizard

Database Project

DevStudio Add-In Wizard

Extended Stored Procedure AppWizard

ISAPI Extension Wizard

Makefile

MFC ActiveX ControlWizard

MFC AppWizard (dll)

Utility Project

Win32 Application

Win32 Console Application

Win32 Dynamic Link Library

Win32 Static Library

ATL COM AppWizard

ATL este Active Template Library, si este utilizata pentru a scrie un mic control AciteX.

Custom AppWizard

Se foloseste în general pentru a crea noi proiecte din altele existente (se copie cod, help, etc.).

Database Project

Daca avem instalat Enterprise Edition of Visual C++, putem crea un proiect de baze de date.

DevStudio Add-In Wizard

Add-ins lucreaza exact ca macro-urile care automatizeaza Developer Studio, dar acestea sunt scrise în C++ sau alt limbaj de programare; macro-urile sunt scrise în VBScript. Acestea folosesc automatizarea pentru a manipula Developer Studio.

ISAPI Extension Wizard

ISAPI este pentru Internet Server API si se refera la functii pe care le putem apela pentru a interactiona cu un server Microsoft Internet Information Server.

Makefile

Daca dorim sa cream un proiect care este utilizat cu un alt utilitar make diferit de Developer Studio, vom selecta aceasta optiune. Nu se genereaza cod.

MFC ActiveX ControlWizard

ActiveX controls sunt controale pe care lescriem pentru a fi utilizate într-un dialog din VC++, o forma din VB sau chiar o pagina Web. Aceste controale înlocuiesc controalele VBX.

MFC AppWizard (DLL)

Daca dorim sa colectam un numar de functii într-un DLL, si aceste functii folosesc clase din MFC, vom selecta aceasta optiune. Daca functiile nu folosesc MFC alegem Win32 Dynamic Link Library.

Win32 Application

Se creaza o aplicatie obisnuita în C++.

Win32 Console Application

O aplicatie consola arata ca o aplicatie obisnuita DOS.

Win32 Dynamic Link Library

Daca dorim sa colectam un numar de functii într-un DLL, si aceste functii folosesc clase din MFC, vom selecta aceasta optiune. Daca functiile nu folosesc MFC alegem Win32 Dynamic Link Library.

Win32 Static Library

Aplicatia va încorpora functiile pe care foloseste dintr-un DLL.

Întelegerea codului generat de AppWizard

Aplicatie SDI

O aplicatie SDI are meniu pe care utilizatorul poate sa-l foloseasca pentru a deschide documente si sa lucreze cu ele.

AppWizard genereaza cinci clase. Numele proiectului este FirstSDI.

CAboutDlg, o clasa de dialog pentru About

CFirstSDIApp, o clasa CWinApp pentru întraga aplicatie (obiectul aplicatie) application

CFirstSDIDoc, o clasa document

CFirstSDIView, o clasa vizualizare

CMainFrame, o clasa cadru

Fisierul FirstSDI.h - pentru aplicatie

// FirstSDI.h : main header file for the FIRSTSDI application

//

#if !defined(AFX_FIRSTSDI_H__ CDF38D8A_8 718_ 11D0_B 02C_0080C81 A3AA2 __INCLUDED_)

#define AFX_FIRSTS DI_H__ CDF3 8D8A_8718_ 11D0_ B 02C_0080C 81A3AA2_ _INCLUDED_

#if _MSC_VER >= 1000

#pragma once

#endif // _MSC_VER >= 1000

#ifndef __AFXWIN_H__

#error include `stdafx.h' before including this file for PCH

#endif

#include "resource.h" // main symbols

/////////////////////////////////////////////////////////////////////////////

// CFirstSDIApp:

// See FirstSDI.cpp for the implementation of this class

//

class CFirstSDIApp : public CWinApp

}AFX_VIRTUAL

// Implementation

//}AFX_MSG

DECLARE_MESSAGE_MAP()

};

/////////////////////////////////////////////////////////////////////////////

//}

// Microsoft Developer Studio will insert additional declarations

// immediately before the previous line.

#endif //!defined(AFX_FIRSTSD I_H__CDF38D8 A_8718_11D0_ B02C_0080 C81A3AA2__IN CLUDE D_)

#ifndef actioneaza ca în codul care urmeaza,si are ca efect includerea fisierului ce urmeaza o singura data.

#ifndef test_h

#include "test.h"

#define test_h

#endif

#pragma once este de asemenea pentru a preveni definitiile multiple daca acest fisier este inclus de doua ori.

Clasa CFirstSDIApp derivata din CWinApp, furnizeaza cea mai mare functionalitate a aplicatiei. Instanta acestei clase constituie obiectul aplicatie. AppWizard a generat anumite functii pentru aceasta clasa care reacopera functiile mostenite din clasa de baza. Aceasta sectiune de cod începe cu //Overrides. De asemenea sunt generate annumite comentarii care ajuta la întelegerea codului. În aceasta sectiune vom gasi declaratia pentru functia InitInstance(). Urmatoarea sectiune de cod este pentru harta de mesaje.

AppWizard genereaza cod pentru constructorul CFirstSDIApp, si functiile InitInstance() si OnAppAbout() în fisierul firstsdi.cpp. Codul generat pentru constructor arata astfel:

CFirstSDIApp::CFirstSDIApp()

Ca regula generala trebuie retinut ca Microsoft construieste obiectele în doi pasi. Se creaza obiectul unde se scrie cod care sigur se executa corect, iar initializarile se fac cu ajutorul unei functii membru, care poate indica daca acestea au fost efectuate cu succes sau nu. Constructorul nu întoarce nici o valore, construieste obiectul.

În continuare prezentam listingul pentru CFirstSDIApp::InitInstance()

BOOL CFirstSDIApp::InitInstance()

Comentariile sunt incluse de AppWizard. InitInstance este apelata prima la lansarea apliactiei.

AfxEnableControlContainer() permite aplicatiei de a contine controale ActiveX. Se permite afisarea controalelor cu aspect 3D.

Se completeaza registrii sub care va fi înregistrata aceasta aplicatie.

InitInstance() înregistreaza în continuare sablonul de document care este SDI în acest caz.

InitInstance() creaza un obiect vid (neinitializat) CCommandLineInfo pentru a mentine parametrii pasati aplicatiei prin linia de comanda când aceasta a fost lansata în executie si apoi apeleaza ParseCommandLine() pentru a completa acest obiect. În final se proceseaza linia de comanda printr-un apel la ProcessShellCommand(). De exemplu daca lansam aplicatia din linia de comanda astfel: FirstSDI fooble, aplicatia va deschide fisierul fooble.

Parametrii din linia de comanda pe care ProcessShellCommand() îi suporta sunt urmatorii:

Parameter

Action

None

Start app and open new file.

Filename

Start app and open file.

/p filename

Start app and print file to default printer.

/pt filename printer driver port

Start app and print file to the specified printer.

/dde

Start app and await DDE command.

/Automation

Start app as an OLE automation server.

/Embedding

Start app to edit an embedded OLE item.

Daca dorim sa implementam o alta comportare, vom construi o clasa derivata din CCommandLineInfo pentru a pastra linia de comanda, si apoi rescriem functiile CWinApp:: ParseCommandLine() si CWinApp::ProcessShellCommand().

Se completeaza variabila m_pMainWnd cu adresa obiectului aplicatiei, variabila ce este defintaîn CWinThread, ce este clasa de baza pentru CWinApp.

La sfârsit functia întoarce TRUE pentru a indica ca restul aplicatiei poate rula.

Harta de mesaje indica ca functia 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 hartii de mesaje este:

BEGIN_MESSAGE_MAP(CFirstSDIApp, CWinApp)

//}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() arata asa:

void CFirstSDIApp::OnAppAbout()

Se construieste obiectul aboutDlg, care este o boxa de dialog, si apoi se executa acest dialog.

Aplicatia Multiple Document Interface

O asemenea aplicatie are meniu si permite utilizatorului de a deschide mai multe documente odata. AppWizard a generat cinci clase. Numele proiectului este FirstMDI. Clasele generate sunt:

CAboutDlg, o clasa de dialog pentru About

CFirstMDIApp, o clasa CWinApp pentru aplicatie

CFirstMDIDoc, o clasa document

CFirstMDIView, o clasa pentru vizualizare

CMainFrame, o clasa cadru

Listing pentru FirstMDI.h

// FirstMDI.h : main header file for the FIRSTMDI application

//

#if !defined(AFX_FIRST MDI_H__CDF38D9E _8718_11D0 _B02C_0080C81A 3AA2__I NCLUDED_)

#define AFX _FIRSTMDI_ H__CDF38D9E_871 8_11D0_ B02C_0080C81A 3AA2__INCLUDED_

#if _MSC_VER >= 1000

#pragma once

#endif // _MSC_VER >= 1000

#ifndef __AFXWIN_H__

#error include `stdafx.h' before including this file for PCH

#endif

#include "resource.h" // main symbols

/////////////////////////////////////////////////////////////////////////////

// CFirstMDIApp:

// See FirstMDI.cpp for the implementation of this class

//

class CFirstMDIApp : public CWinApp

}AFX_VIRTUAL

// Implementation

//}AFX_MSG

DECLARE_MESSAGE_MAP()

};

/////////////////////////////////////////////////////////////////////////////

//}

// Microsoft Developer Studio will insert additional declarations immediately

// before the previous line.

#endif //!defined(AFX_FIRSTMDI_ H__CDF38D 9E_8718_ 11D0_B02C _0080C81A 3AA2__I NCLUDED_)

Nici o diferenta fata de clasa de la aplicatia SDI.

Listing pentru CFirstMDIApp::InitInstance()

BOOL CFirstMDIApp::InitInstance()

Care sunt deferentele? Folosind WinDiff le putem vedea mai usor.

Aplicatia MDI foloseste CMultiDocTemplate

Aplicatia MDI seteaza fereastra cadru si apoi o arata, ceea ce nu face o aplicatie SDI.

Componentele unei aplicatii bazate pe dialog

AppWizard genereaza trei clase:

CAboutDlg, o clasa dialog pentru About

CFirstDialogApp, o clasa CWinApp pentru întreaga aplicatie

CFirstDialogDlg, o clasa de dialog pentru întreaga aplicatie.

// FirstDialog.h : main header file for the FIRSTDIALOG application

//

#if !defined(AFX_FIRSTDIAL OG_H__CDF 38DB4_8718_11 D0_B02C_0080C81 A3 AA2__INCLUDED_)

#define AF X_FIRSTDI ALOG_H__ CDF38DB4_ 8718_11D0_B02C_ 0080C8 1A3AA2_ _INCLUDED_

#if _MSC_VER >= 1000

#pragma once

#endif // _MSC_VER >= 1000

#ifndef __AFXWIN_H__

#error include `stdafx.h' before including this file for PCH

#endif

#include "resource.h" // main symbols

/////////////////////////////////////////////////////////////////////////////

// CFirstDialogApp:

// See FirstDialog.cpp for the implementation of this class

//

class CFirstDialogApp : public CWinApp

}AFX_VIRTUAL

// Implementation

//}AFX_MSG

DECLARE_MESSAGE_MAP()

};

/////////////////////////////////////////////////////////////////////////////

//}

// Microsoft Developer Studio will insert additional declarations immediately

// before the previous line.

#endif // !defined(AFX_FIRSTDIAL OG_H__CDF3 8DB4_8718 _11D0_B 2C_0080C8 1A3AA2

¬__INCLUDED_)

Listing pentru CDialog16App::InitInstance()

BOOL CFirstDialogApp::InitInstance()

else if (nResponse == IDCANCEL)

// Because the dialog has been closed, return FALSE so that you exit the

// application, rather than start the application's message pump.

return FALSE;

}


Document Info


Accesari: 3378
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )