Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Doc / View tutorijal

[es] :: C/C++ programiranje :: Doc / View tutorijal

[ Pregleda: 5061 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Gile1999

Član broj: 1970
Poruke: 5
*.rcub.bg.ac.yu



Profil

icon Doc / View tutorijal08.01.2002. u 22:01 - pre 254 meseci
Nov sam u Visual C++ pa mi je potreban neki dobar tutorijal za doc/view programiranje. Takode me zanima zbog cega poinetre koje kreiram ne brisem (delete pPointer) posle koriscenja. MFC sam oslobada memoriju?
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Doc / View tutorijal08.01.2002. u 22:34 - pre 254 meseci
Za pocetak, pogledaj "Scribble tutorial" koji dobijas uz VC++. Kad to savladas, pogledaj:

http://www.codeproject.com/docview

a bogami i:

http://www.codeguru.com/doc_view/index.shtml

Tamo ima gomila primera za Doc/View

Sto se tice pointera pod MFC-om, pogledaj malo:

http://www.codeproject.com/gdi/drawtechniques.asp

 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Doc / View tutorijal16.01.2002. u 20:38 - pre 254 meseci
Hmm, vrlo cudno. Priznajem, ja nikada nisam, niti cu, programirao koristeci M$ MFC.
Siguran sam da svaki pointer koji kreiras sa new klauzulom mozes da obrises sa delete klauzulom...

Na kraju - ni M$ VC++ ne koristim, ali ovo sto sam gore rekao stoji i dalje i generalno (treba) da vazi za sve C++ kompajlere.

Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: Doc / View tutorijal17.01.2002. u 00:22 - pre 254 meseci
Jedino ako je pointer na kraju proga, i/ili nece opet biti koriscen (do kraja proga), nema potrebe brisati ga (mada nije na odmet) jer po zavrsetku programa, OS sam vraca memoriju sa slobodnog skladista.
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16292
*.verat.net



+7110 Profil

icon Re: Doc / View tutorijal17.01.2002. u 14:36 - pre 254 meseci
Citat:
Gile1999:
Nov sam u Visual C++ pa mi je potreban neki dobar tutorijal za doc/view programiranje. Takode me zanima zbog cega poinetre koje kreiram ne brisem (delete pPointer) posle koriscenja. MFC sam oslobada memoriju?



Hmm.. ko ti je rekao da ne brises pointere (to jest - da dealociras memoriju koju si zauzeo?) ?? Postoji vise nacina pristupa new/delete problemu, i obicno se izbegava visestruko koriscenje new/delete kombinacije ako se taj fragment koda izvrsava u petlji... prirodnije je da se ti pointeri alociraju pre izvrsavanja koda koji se ponavlja a dealociraju na kraju. U svakom slucaju se pointeri brisu na kraju, i NE TREBA ostavljati to operativnom sistemu da radi, jer ako koristis neke naprednije alatke (npr: NuMega BoundsChecker) one ce se buniti da tvoj kod pravi leakove.

E.. postoje neki pointeri u MFC-u koji se ne brisu, ja se ne secam (ni ja ne radim u MFC-u aktivno, tek ponekad nesto napisem) - mislim da je u pitanju CPaintDC pointer kada se nesto crta u prozoru, ali nisam bas siguran... u svakom slucaju, ono sto ti alociras sa new, se ocekuje da dealociras sa delete u nekom momentu...


DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Doc / View tutorijal17.01.2002. u 19:09 - pre 254 meseci
Grafički objekti koje vraća funkcija CDC::SelectObject() su "privremeni", tj briše ih funkcija CWinApp::OnIdle() i ne treba ih brisati sa delete. Nije mi jasno zašto je to tako izvedeno.

Uglavnom, pravilo je da kreirane objekte NEKO mora da izbriše, inače imaš tzv "resource leaks". Takođe, dobra je praksa da ako izbrišeš neki pointer sa delete, posle toga postaviš njegovu vrednost na 0.
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: Doc / View tutorijal17.01.2002. u 19:26 - pre 254 meseci
Rekao sam da moze (u odredjenim slucajevima, na kraju proga) a ne da to postane pravilo, koje moze dovesti do nepredvidjenih rezultata, od kojih je memory leak najpredvidljiviji.
 
Odgovor na temu

Gile1999

Član broj: 1970
Poruke: 5
*.rcub.bg.ac.yu



Profil

icon Re: Doc / View tutorijal21.01.2002. u 10:51 - pre 254 meseci
Uh,
dugujem vam objasnjenje. Radi se o sledecem kodu:

//hello.cpp

#include <afxwin.h>

// Declare the application class
class CHelloApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};

// Create an instance of the application class
CHelloApp HelloApp;

// Declare the main window class
class CHelloWindow : public CFrameWnd
{
CStatic* cs;
public:
CHelloWindow();
};

// The InitInstance function is called each
// time the application first executes.
BOOL CHelloApp::InitInstance()
{
m_pMainWnd = new CHelloWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}

// The constructor for the window class
CHelloWindow::CHelloWindow()
{
// Create the window itself
Create(NULL,
"Hello World!",
WS_OVERLAPPEDWINDOW,
CRect(0,0,200,200));
// Create a static label
cs = new CStatic();
cs->Create("hello world",
WS_CHILD|WS_VISIBLE|SS_CENTER,
CRect(50,80,150,150),
this);
}

ceo tutorijal se nalazi na:

http://www.cse.iitb.ernet.in:8.../stuff/OSes/windows/MFC/2.html

A sada pitanje.
Gde se brise pointer "cs" kao i gde se kreira pokazivac "m_pMainWnd"???
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16292
*.verat.net



+7110 Profil

icon Re: Doc / View tutorijal21.01.2002. u 11:42 - pre 254 meseci
Citat:
Gile1999:
A sada pitanje.
Gde se brise pointer "cs" kao i gde se kreira pokazivac "m_pMainWnd"???


Ne ne .. to se ne brise, m_pMainWnd je kreiran od strane MFC frameworka pri kreiranju aplikacije i MFC framework ce ga i obrisati kada se aplikacija zatvori.

Brises samo ono sto si TI alocirao !

Znaci, ako si pointer dobio na drugi nacin osim new/malloc onda ga nemoj brisati sa delete/free.

DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Doc / View tutorijal22.01.2002. u 22:10 - pre 254 meseci
Citat:
Gile1999:
Gde se brise pointer "cs" kao i gde se kreira pokazivac "m_pMainWnd"???


m_pMainWnd je deklarisan u klasi CWinThread iz koje je izvedena CWinApp, a iz nje je izvedena tvoja app klasa. Dakle, m_pMainWnd si "nasledio" od CWinThread.

Što se tiče "cs"-a, najpre da te pohvalim: odlično pitanje. Odgovor leži u funkciji PostNcDestroy. Naime, kada "zatvoriš" program, poslednja poruka koju svaki prozor (a i kontrole su prozori) primi je WM_NCDESTROY, koja je oobrađena MFC funkcijom PostNcDestroy, a ona pozove
Code:

 delete this;


Dakle, MFC vodi računa o tome, ali samo kada su u pitanju prozori.

Za više detalja pogledaj Microsoftov TN017: Destroying Window Objects

 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Doc / View tutorijal22.01.2002. u 22:38 - pre 254 meseci
He, u stvari sam malo lupio. Priča o PostNcDestroy važi za m_pMainWnd, a ne za cs.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Doc / View tutorijal

[ Pregleda: 5061 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.