Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Aplicatiir MFC

calculatoare



+ Font mai mare | - Font mai mic



1. Crearea aplicatiilor MFC

Descrierea claselor dintr-o aplicatie standard MFC.

Scrierea aplicatiilor Non-Document/View.

Descrierea arhitecturii Document/View ( Notiuni fundamentale )



Analiza unei aplicatii bazata pe arhitectura Document/View.

Crearea unei aplicatii Document/View ( SDI ) folosind AppWizard.

2. Depanarea aplicatiilor MFC

Mediul de depanare

Folosirea Depanatorului

1. Crearea aplicatiilor MFC

Clase intr-o apliactie minimala MFC  :

-Clasa pentru aplicatie

definitie  : reprezinta aplicatia ca un intreg, este clasa de baza care se ocupa de initializarea, rularea si terminarea apliactiei.

-trebuie sa existe un obiect si numai unul de o clasa derivata din CWinApp intr-o apliactie.

-Trebuie rescrisa ( override ) functia InitInstance, cind    se deriva o clasa pentru aplicatie din CWinApp.

-demonstratie animata despre clasa apliactiei

-clasa aplicatie si pozitia ei in ierarhia MFC  :

clasa aplicatie si pozitia in ierarhie

-Clasa pentru cadrul principal al apliactiei

Defineste spatiul de lucru al aplicatiei pe ecran si serveste ca si container pentru spatiul de vizualizare.

Reprezinta chenarul ferestrei principale, pozitioneaza si determina automat dimensiunea ferestrei de vizualizare ( View ) .Gestioneaza elementele de interfata ale aplicatiei cum ar fi  : butoanele de minimizare, maximizare, salvare ( Save ) , inchidere ( Close ) , bara de titlu si icoana din bara de titlu, meniul principal al apliactiei, barele de derulare, bara de stare, si cea de instrumente.

Implicata in gestionarea mesajelor ( harat de mesaje si tratarea mesajelor )   :

CFrameWnd este clasa derivata indirect din CCmdTarget ceea ce inseamna ca poate receptiona si trata mesaje de comanda.

Principalele functii ale clasei sint  :

GetActiveView

GetActiveDocument

Scrierea unei aplicatii fara suportul arhitecturii Document/View

- Introducere in arhitectura Non-Document/View

Cel mai simplu mod de a crea o apliactie Non-Document/View este prin crearea unei apliactii bazate pe cutie de dialog

Codul generat de AppWizard  :

BOOL CNonDocViewApp : : InitInstance ( )

else if ( nResponse == IDCANCEL )

// Since the dialog has been closed, return FALSE so that we exit the

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

return FALSE;

- Analiza unei aplicatii fara suportul arhitecturii Document/View

Derivarea claselor apliactie si pentru cadru principal din CWinApp respectiv CFrameWnd.

Declararea obiectului aplicatie global

Rescrierea ( Override ) functiei InitInstance.

Crearea ferstrei.

m _ pMainWnd = new CMainFrame;

( ( CMainFrame* ) m _ pMainWnd ) ->Create ( NULL,'The MFC Application' ) ;

Afisarea ferestrei.

m _ pMainWnd->ShowWindow ( m _ nCmdShow ) ;

tema laborator :

scrierea de mina a unei apliactii minimale MFC ( fara folosirea vrajitorilor )

Fundamentele arhitecturii Document/View

Demonstartie : componentele unei aplicatii Document/View

-Introducere in arhitectura Document/View

conceptul de arhitectura Document/View si principalele obiecte implicate

-Clasa Document

clasa CDocument incarca dintr-un fisier sau de la utilizator, stocheaza si gestioneaza datele programului.

Pentru a mentine o legatura cit mai strinsa intre document si view in arhitectura document/view, fiecare obiect document mentine o lista cu toate vizualizarile ( view ) asociate si fiecare obiect vizualizare mentine un pointer catre documentul asociat.

Cele mai importante functii sint : GetFirstViewPosition, GetNextView, IsModified, UpdateAllViews

Functiile care sint rescrise ( overridable member functions ) : OnNewDocument, OnOpenDocument, DeleteContents, Serialize.

-Clasa Vizualizare ( View )

Reprezinta suprafata in care sint afisate informatiile continute de clasa document si permite interactiunea cu utilizatorul.

Un obiect document poate avea oricite vizualizari asociate in schimb unui obiect vizualizare nu i se poate asocia decit un singur document.

Clase derivate din CView : CCtrlView, CEditView, CListView, CTreeView.

Functii ce pot fi rescrise ( overridable member functions ) : OnDraw, OnInitialUpdate, OnUpdate.

-Clasa sablon pentru Document ( Document Template Class )

Este clasa care leaga impreuna clasele pentru cadru ( frame ) , vizualizare ( view ) , document, si setul de resurse al aplicatiei.

Mentine o lista cu toate obiectele document existente in aplicatie, si este responsabile pentru gestionarea existentei acestora. In plus asociaza diverse resurse cu aceste obiecte.

Cadrul ( Scheletul ) principal al aplicatiei poate folosi doua clase sablon pentru document :

CSingleDocTemplate ( pentru aplicatii SDI ) .

CMultiDocTemplate. ( pentru aplicatii MDI ) .

Analiza unei apliactii Document/View

Clasele implicate intr-o palicatie MFC bazata pe arhitectura Document/View :



Clasa derivata din CWinApp.

Seteaza registrii windows ( inregistreaza aplicatia in baza de date a sistemului de operare )

Incarca profilul aplicatiei

Creaza un sablon pentru document

Initializeaza parametrii din linia de comanda

Exemplu codul sursa :

// Reader.cpp : Defines the class behaviors for the application.

#include 'stdafx.h'

#include 'Reader.h'

#include 'MainFrm.h'

#include 'ReaderDoc.h'

#include 'ReaderView.h'

#ifdef _ DEBUG

#define new DEBUG _ NEW

#undef THIS _ FILE

static char THIS _ FILE[] = _ _ FILE _ _ ;

#endif

// CReaderApp

BEGIN _ MESSAGE _ MAP ( CReaderApp, 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 ( )

// CReaderApp construction

CReaderApp : : CReaderApp ( )

// The one and only CReaderApp object

CReaderApp theApp;

// CReaderApp initialization

BOOL CReaderApp : : InitInstance ( )

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

//}}AFX _ DATA

// ClassWizard generated virtual function overrides

//}AFX _ VIRTUAL

// Implementation



protected :

//}AFX _ MSG

DECLARE _ MESSAGE _ MAP ( )

CAboutDlg : : CAboutDlg ( ) : CDialog ( CAboutDlg : : IDD )

}AFX _ DATA _ INIT

void CAboutDlg : : DoDataExchange ( CDataExchange* pDX )

}AFX _ DATA _ MAP

BEGIN _ MESSAGE _ MAP ( CAboutDlg, CDialog )

//}AFX _ MSG _ MAP

END _ MESSAGE _ MAP ( )

// App command to run the dialog

void CReaderApp : : OnAppAbout ( )

// CReaderApp commands

Clasa derivata din CFrameWnd.

Creaza dinamic obiectele

Creaza fereastra

Creaza si incarca bara de instrumente ( toolbar ) .

Agata bara de instrumente de chenarul aplicatiei ( docking the toolbar )

Exemplu codul sursa urmator :

// MainFrm.h : interface of the CMainFrame class

#if !defined ( AFX _ MAINFRM _ H _ _ 7EC9070B _ F96E _ 11D0 _ B9C5 _ 00AA00688598 _ _ INCLUDED _ )

#define AFX _ MAINFRM _ H _ _ 7EC9070B _ F96E _ 11D0 _ B9C5 _ 00AA00688598 _ _ INCLUDED _

#if _ MSC _ VER >= 1000

#pragma once

#endif // _ MSC _ VER >= 1000

class CMainFrame : public CFrameWnd

}AFX _ VIRTUAL

// Implementation

public :

virtual ~CMainFrame ( ) ;

#ifdef _ DEBUG

virtual void AssertValid ( ) const;

virtual void Dump ( CDumpContext& dc ) const;

#endif

protected :     // control bar embedded members

CStatusBar    m _ wndStatusBar;

CToolBar    m _ wndToolBar;

// Generated message map functions

protected :

//}AFX _ MSG

DECLARE _ MESSAGE _ MAP ( )

// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined ( AFX _ MAINFRM _ H _ _ 7EC9070B _ F96E _ 11D0 _ B9C5 _ 00AA00688598 _ _ INCLUDED _ )

// MainFrm.cpp : implementation of the CMainFrame class

#include 'stdafx.h'

#include 'Reader.h'

#include 'MainFrm.h'

#ifdef _ DEBUG

#define new DEBUG _ NEW

#undef THIS _ FILE

static char THIS _ FILE[] = _ _ FILE _ _ ;

#endif

// CMainFrame

IMPLEMENT _ DYNCREATE ( CMainFrame, CFrameWnd )

BEGIN _ MESSAGE _ MAP ( CMainFrame, CFrameWnd )

//}AFX _ MSG _ MAP

END _ MESSAGE _ MAP ( )

static UINT indicators[] =

// CMainFrame construction/destruction

CMainFrame : : CMainFrame ( )

CMainFrame : : ~CMainFrame ( )

int CMainFrame : : OnCreate ( LPCREATESTRUCT lpCreateStruct )

if ( !m _ wndStatusBar.Create ( this ) ||

!m _ wndStatusBar.SetIndicators ( indicators,

sizeof ( indicators ) /sizeof ( UINT ) ) )

// TODO : Remove this if you don't want tool tips or a resizeable toolbar

m _ wndToolBar.SetBarStyle ( m _ wndToolBar.GetBarStyle ( ) |

CBRS _ TOOLTIPS | CBRS _ FLYBY | CBRS _ SIZE _ DYNAMIC ) ;

// TODO : Delete these three lines if you don't want the toolbar to

be dockable

m _ wndToolBar.EnableDocking ( CBRS _ ALIGN _ ANY ) ;

EnableDocking ( CBRS _ ALIGN _ ANY ) ;

DockControlBar ( &m _ wndToolBar ) ;

return 0;

BOOL CMainFrame : : PreCreateWindow ( CREATESTRUCT& cs )

// CMainFrame diagnostics

#ifdef _ DEBUG

void CMainFrame : : AssertValid ( ) const

void CMainFrame : : Dump ( CDumpContext& dc ) const

#endif // _ DEBUG

// CMainFrame message handlers



Clasa derivata din CDocument

Are o variabila membru protected m _ LineList, derivata din clasa CstringList ( in aceasta variabila se vor stoca datele aplicatiei )

Functii membru pentru accesul la aceasta variabila ( m _ LineList )

Functia DeleteContents apeleaza functia RemoveAll ( sterge intreg continutul documentului )

Functia OnOpenDocument foloseste clasa CstdioFile ( pentru acesul la fisiere )

Exemplu codul sursa urmator :

// ReaderDoc.h : interface of the CReaderDoc class

#if !defined ( AFX _ READERDOC _ H _ _ 7EC9070D _ F96E _ 11D0 _ B9C5 _ 00AA00688598 _ _ INCLUDED _ )

#define AFX _ READERDOC _ H _ _ 7EC9070D _ F96E _ 11D0 _ B9C5 _ 00AA00688598 _ _ INCLUDED _

#if _ MSC _ VER >= 1000

#pragma once

#endif // _ MSC _ VER >= 1000

class CReaderDoc : public CDocument

// Operations

public :

// Overrides

// ClassWizard generated virtual function overrides

//}AFX _ VIRTUAL

// Implementation

public :

virtual ~CReaderDoc ( ) ;

#ifdef _ DEBUG

virtual void AssertValid ( ) const;

virtual void Dump ( CDumpContext& dc ) const;

#endif

protected :

CStringList m _ LineList;

virtual void DeleteContents ( )

// Generated message map functions

protected :

//}AFX _ MSG

DECLARE _ MESSAGE _ MAP ( )

// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined ( AFX _ READERDOC _ H _ _ 7EC9070D _ F96E _ 11D0 _ B9C5 _ 00AA00688598 _ _ INCLUDED _ )

// ReaderDoc.cpp : implementation of the CReaderDoc class

#include 'stdafx.h'

#include 'Reader.h'

#include 'ReaderDoc.h'

#ifdef _ DEBUG

#define new DEBUG _ NEW

#undef THIS _ FILE

static char THIS _ FILE[] = _ _ FILE _ _ ;

#endif

// CReaderDoc

IMPLEMENT _ DYNCREATE ( CReaderDoc, CDocument )

BEGIN _ MESSAGE _ MAP ( CReaderDoc, CDocument )

//}AFX _ MSG _ MAP

END _ MESSAGE _ MAP ( )

// CReaderDoc construction/destruction

CReaderDoc : : CReaderDoc ( )

CReaderDoc : : ~CReaderDoc ( )

BOOL CReaderDoc : : OnNewDocument ( )

// CReaderDoc serialization

void CReaderDoc : : Serialize ( CArchive& ar )

else

// CReaderDoc diagnostics

#ifdef _ DEBUG

void CReaderDoc : : AssertValid ( ) const

void CReaderDoc : : Dump ( CDumpContext& dc ) const

#endif // _ DEBUG

// CReaderDoc commands

BOOL CReaderDoc : : OnOpenDocument ( LPCTSTR lpszPathName )

EndWaitCursor ( ) ;

return TRUE;

Clasa derivata din CView

Aici sint doua functii importante :

GetDocument - care face legatura cu documentul pentru a afisa datele continute de variabila m _ LineList

OnDraw - functia care se ocupa de afisarea acestor date

Exemplu codul sursa care urmeaza :

// ReaderView.h : interface of the CReaderView class

#if !defined ( AFX _ READERVIEW _ H _ _ 7EC9070F _ F96E _ 11D0 _ B9C5 _ 00AA00688598 _ _ INCLUDED _ )

#define AFX _ READERVIEW _ H _ _ 7EC9070F _ F96E _ 11D0 _ B9C5 _ 00AA00688598 _ _ INCLUDED _

#if _ MSC _ VER >= 1000

#pragma once

#endif // _ MSC _ VER >= 1000

class CReaderView : public CView

}AFX _ VIRTUAL

// Implementation

public :

virtual ~CReaderView ( ) ;

#ifdef _ DEBUG

virtual void AssertValid ( ) const;

virtual void Dump ( CDumpContext& dc ) const;

#endif



protected :

// Generated message map functions

protected :

//}AFX _ MSG

DECLARE _ MESSAGE _ MAP ( )

#ifndef _ DEBUG // debug version in ReaderView.cpp

inline CReaderDoc* CReaderView : : GetDocument ( )

#endif

// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined ( AFX _ READERVIEW _ H _ _ 7EC9070F _ F96E _ 11D0 _ B9C5 _ 00AA00688598 _ _ INCLUDED _ )

// ReaderView.cpp : implementation of the CReaderView class

#include 'stdafx.h'

#include 'Reader.h'

#include 'ReaderDoc.h'

#include 'ReaderView.h'

#ifdef _ DEBUG

#define new DEBUG _ NEW

#undef THIS _ FILE

static char THIS _ FILE[] = _ _ FILE _ _ ;

#endif

// CReaderView

IMPLEMENT _ DYNCREATE ( CReaderView, CView )

BEGIN _ MESSAGE _ MAP ( CReaderView, CView )

//}AFX _ MSG _ MAP

// Standard printing commands

ON _ COMMAND ( ID _ FILE _ PRINT, CView : : OnFilePrint )

ON _ COMMAND ( ID _ FILE _ PRINT _ DIRECT, CView : : OnFilePrint )

ON _ COMMAND ( ID _ FILE _ PRINT _ PREVIEW, CView : : OnFilePrintPreview )

END _ MESSAGE _ MAP ( )

// CReaderView construction/destruction

CReaderView : : CReaderView ( )

CReaderView : : ~CReaderView ( )

BOOL CReaderView : : PreCreateWindow ( CREATESTRUCT& cs )

// CReaderView drawing

void CReaderView : : OnDraw ( CDC* pDC )

TRACE ( 'nYDelta = %dn',nYDelta ) ;

// CReaderView printing

BOOL CReaderView : : OnPreparePrinting ( CPrintInfo* pInfo )

void CReaderView : : OnBeginPrinting ( CDC* /*pDC*/, CPrintInfo* /*pInfo*/ )

void CReaderView : : OnEndPrinting ( CDC* /*pDC*/, CPrintInfo* /*pInfo*/ )

// CReaderView diagnostics

#ifdef _ DEBUG

void CReaderView : : AssertValid ( ) const

void CReaderView : : Dump ( CDumpContext& dc ) const

CReaderDoc* CReaderView : : GetDocument ( ) // non-debug version is inline

#endif // _ DEBUG

// CReaderView message handlers

2 - Depanarea aplicatiilor

Mediul de depanare

Compilarea in mod debug versus compilarea in mod Release

Compilarea in mod debug  :

Mediul de dezvoltare Visual Studio ofera o multime de informatii. Implicit caracteristicile de depanare optima nu sint setate ; in general optimizarea acestora fac mult mai dificila depanarea programului.

Compilarea in mod Release  :

Implicit compilarea in mod release este optimizata pentru a obtine maximul de viteza si performanta.Aceasta nu ofera informatii pentru depanare.

Meniurile depanatorului

Build Menu

Debug menu

View menu

Edit menu

Barele de instrumente a depanatorului

Accesarea toobarului pentru depanare

Elementele toolbarului pentru depanare  :

Fereastrele depanatorului

Fereastra Output :

Afiseaza informatii despre procesul de compilare inclusiv despre orice eroare de compilare, linkeditare, sau altor unelte de builduire si ceea ce transmite pentru afisare functii ca OutputDebugString sau afxDump; afiseaza codul cu care se termina un fir de eexecutie; si semnaleaza aparitia unor exceptii.

Fereastar Watch :

Afiseaza numele si valorile unor variabile si expresii

Fereastra Variables :

Afiseaza informatii despre variabilele folosite in blocul curent si cel anterior si valoarea returnata de functie ( in tabul Auto ) ; variabilele locale ale functiei curente ( tabul Locals ) ; si abiectele de la anumite adrese ( tabul This ) .

Fereastra Register :

Afiseaza continutul geberal al registrilor procesor si statusul acestora ( Numai in Visual C++ )

Fereastra Memory :

Afiseaza cea ce se gaseste in memorie la un momentul curent ( numai Visual C++ )

Feraesatra Call Stack :

Afiseaza cadrul de stiva al tuturor functiilor care au fost apelate si din care nu s-a revenit.

Fereastra Disassembly :

Afiseaza codul in limbaj de asamblare al programului compilat in acel moment.

Cutiile de dialog din depanator

Breakpoints :

Afiseaza o lista cu toate breakpointurile din proiectul curent.Folosind aceasta cutie de dialog se pot noi puncte de oprire a parcurgerii codului.

Exceptions :

Afiseaza exceptiile generate de sistem sau de utilizator din proiectul curent. Cu ajutorul acestei cutii de dialog se poate controla modul in care depanatorul sa trateze aceste exceptii.

QuickWatch :

Afiseaza o variabila sau o expresie. Se utilizeaza pentru a vedea sau modifica rapid o variabila sau o expresie sau pentru a o adauga in fereastra Watch.

Threads :

Afiseaza firele de executie ale aplicatiei disponibile pentru depanare. Se foloseste acesat cutie de dialog pentru a suspenda sau opri din executie un fir de executie si pentru a seta focusul.

Folosirea Depanatorului

Setarea si gestionarea Breakpoints

Setarea Breakpoints - urilor se poate face : la o linie de cod sursa, la inceputul unei functii, la punctul de revenire dintr-o functie, la o eticheta.

Vizualizarea Breakpoints setate

Stergerea breakpoints -urilor

Parcurgerea pas cu pas a unei aplicatii

Lansarea in executie a unei aplicatii si executarea pas cu pas ( Step Into )

( Step into ) Intrarea intr-o anumita functie.

Vizualizarea si modificarea variabilelor

Vizualizarea cadrului de stiva

Rularea in mod debug pina la o locatie specifica din cod

Utilizarea Visual Browse Windows

Setarea optiuniide depanare Just-in -Time

tema laborator :

Utilizarea AppWizard pentru crearea unei aplicatii MFC simple.

Exercitii :

1.Crearea unei aplicatii minimale MFC fara ajutorul AppWizard si ClassWizard ( MinApp )

-se construieste un proiect Win32 Aplication gol.

-se deriva doua clase CMyApp din CWinApp si CMainFrame din CframeWnd ,se include afxwin.h ( in MinApp.h )

-se rescrie functia virtual BOOL InitInstance ( ) ; in clasa CMyApp.

-din meniu Project-Setings ( general ) se include suport MFC.

-se compileaza si lanseaza in executie

2.Crearea unei aplicatii cu AppWizard ( TextEditor )

-aplicatie SDI, fara suport ActiveX, clasa CtextEditorView se deriva din CeditView

-se compileaza si se ruleaza aplicatia .

3.Aplicatie pentru depanare

-se ia o aplicatie existenta ( asemanatoare cu cea creata la exercitiul 2 TextEditor ) numita TextReader

-aceasta citeste fisiere create anterior prin intermediul clasei document unde exista o variabila care pastreaza sirurile din fisietul deschis

-se afiseaza in View si se foloseste macroul TRACE pentru a afisa valoarea unei variabile care da dimensiunea textului in fereastra Output a Debugaru-lui.

-se urmaresc diferentele intre afisarea normala si PrintPreview

4.Depanare - observare a ceea ce se intimpla cu debugarul la lansarea in executie a aplicatiei minimale .

-se ia aplicatia creata in primul exercitiu ( MinApp ) si se urmareste cu debugarul functiile care se apleleaza la lansarea in executie si ordinea lor. ( cel mai mult o aplicatie o petrec





Politica de confidentialitate | Termeni si conditii de utilizare



});

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari : 954
Importanta : rank

Comenteaza documentul :

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved