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

Pointer na CDilalog (MFC)

[es] :: C/C++ programiranje :: Pointer na CDilalog (MFC)

[ Pregleda: 3822 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Iznogud
Subotica

Član broj: 1721
Poruke: 212
*.vdial.verat.net



Profil

icon Pointer na CDilalog (MFC)30.10.2003. u 13:41 - pre 248 meseci
Poceh od skora da se bavim MSVC++ pa imam jedan problemcic(verujem trivialan za iskusnije).
Naime, da li je moguce dobiti pokazivac na na odredjen dialog prozor ako znam njegov ID?
Definisao sam jednu posebnu klasu cije varijable trebam popuniti sa vrednostima koje se nalze na/u kontrolama na samo dialogu (koji je, jel, posebna klasa);
Preturao sam po MSDN ali nisam se bas najbolje snasao tamo, tj nema ni jedne funkcije za pristup dialogu na osnovu njegovog ID. Mozda neko bolje resenje???


 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Pointer na CDilalog (MFC)30.10.2003. u 15:58 - pre 248 meseci
Imaš konstruktor za CDialog čiji je parametar resource ID, ako sam dobro razumeo šta hoćeš.


 
Odgovor na temu

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
212.200.96.*

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: Pointer na CDilalog (MFC)30.10.2003. u 22:59 - pre 248 meseci
Mislim da ne postoji jednostavan nacin, ako postoji uopste.
Uglavnom zato sto je pokazivac na CDialog u stvari pokazivac na instancu objekta CDialog klase, a takvih za jedan resource ID moze da bude vise. Cak i vise klasa (CDialog1, CDialog2...).

Ako uopste postoji nacin, to je da se setas kroz listu SVIH prozora i da pokusas da saznas koji je od njih dijalog sa datim resource ID-om. Sve u svemu, malo verovatno da ti se isplati i ako je moguce.

Mnogo ti je jednostavnije da, cim kreiras objekat, sacuvas negde pokazivac na njega.
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.sbb.co.yu



Profil

icon Re: Pointer na CDilalog (MFC)31.10.2003. u 00:42 - pre 248 meseci
Nisam bas najbolje razumeo sta zelis da izvedes... Probaj ovako..

1. Recimo da imas klasu CPodaci i imas negde primerak te klase:
CPodaci podaci;

2. Napravi klasu CPodaciDlg i u private deo smesti
CPodaci* m_pPodaci;

3. Modifiuj konstruktor CPodaciDlg:
u .h:
CPodaciDlg(CPodaci*p, CWnd* pParent =NULL)

i u .cpp:
CPodaciDlg::CPodaciDlg(CPodaci*p, CWnd* pParent /*=NULL*/): CDialog(CPodaciDlg::IDD, pParent)
{
m_pPodaci = p;
}

4. Isprogramiraj dialog. Sada iz metoda dialoga mozes da pristupas
public metodama i varijablama u prosledjenom primerku klase CPodaci
tj. m_pPodaci...

5. U CPodaciDlg::OnInitDialog metodi, popuni stanje kontrola vrednostima iz m_pPodaci.

Kada pravis instancu CPodaciDlg to uradi na sledeci nacin:
// modalni dialog
CPodaciDlg pd(&podaci, this);
pd.DoModal();

ili

// nemodalni dialog
CPodaciDlg *m_pPodaciDlg;
...
m_pPodaciDlg = new CPodaciDlg(&podaci);
m_pPodaciDlg->Create(CPodaciDlg::IDD, NULL);


yooyo
 
Odgovor na temu

Beban
Beograd

Član broj: 6351
Poruke: 39
*.ppp-bg.sezampro.yu



Profil

icon Re: Pointer na CDilalog (MFC)31.10.2003. u 01:23 - pre 248 meseci
Mislim da ti za taj problem ne treba pointer na dijalog; dijalog definiši kao member promjenljivu u heder fajlu tvoje View klase. Zatim ga pozoveš sa funkcijom DoModal(), pa pointere na njegove kontrole "pokupiš" sa funkcijom GetDlgItem, čiji je argument ID kontrole. Onda, kada imaš pointer na kontrolu, nije ti problem da pročitaš ono što je u njoj zapisano.

Ako je to ono što želiš...
 
Odgovor na temu

Iznogud
Subotica

Član broj: 1721
Poruke: 212
*.163.EUnet.yu



Profil

icon Re: Pointer na CDilalog (MFC)05.11.2003. u 13:50 - pre 248 meseci
Bio sam odsutan, tako da do sad nisam imao mogucnost da probam ove vase predloge. Postupiosam onako kako je yooyo predlozio (stom razliko sto meni u stvari treba obrnuto. tj da u klasu podaci prenesem vrednosti sa dialoga.
Naime, uradio sam ovo:
Izmenio sam konstruktor dialog klase i on izgleda ovako:
Code:

CDlgNewMail::CDlgNewMail(CEmail* pem,CWnd* pParent /*=NULL*/)
    : CDialog(CDlgNewMail::IDD, pParent)

Instancu dialoga pravim sa:
Code:

    CEmail email;
    CDlgNewMail* NewMail = new CDlgNewMail(&email);
    NewMail->Create(CDlgNewMail::IDD,NULL);
    NewMail->ShowWindow(SW_SHOW);


Unutar klase CDlgNewMail postoji funkcija OnBsalji() unutar koje se poziva funkcija clanica klase CEmail- GetHeader() na sledeci nacin:
Code:

void CDlgNewMail::OnBsalji() 
{
    ......
    UpdateData(TRUE);
    this.m_pEmail->GetHeader();
}

Gde je m_pEmail clan klase CDlgNewMail definisam kao: CEmail* m_pemail.

Na mestu poziva ove funkcije program pada i ispisuje nesto kao:
"The instructions at "0x10217c15c referenced memory at "blablaxxx". The memory could not read".
Gde ja to gresim???


 
Odgovor na temu

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
*.medianis.net

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: Pointer na CDilalog (MFC)05.11.2003. u 14:13 - pre 248 meseci
Citat:
Iznogud:
Code:

    CEmail email;
    CDlgNewMail* NewMail = new CDlgNewMail(&email);
    NewMail->Create(CDlgNewMail::IDD,NULL);
    NewMail->ShowWindow(SW_SHOW);


Obrati paznju da ti je email promenljiva na steku, i ona biva unistena na kraju funkcije gde je ovaj kod. U CDlgNewMail::OnBsalji() pokazivac m_pEmail ukazuje na mesto gde se ranije nalazila email promenljva a sad je ko zna sta.

Problem ces da resis tako sto email alociras na heap-u (dakle sa new) a delete objekta radis iz CDlgNewMail destruktora (na primer).
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
*.pexim.co.yu



+62 Profil

icon Re: Pointer na CDilalog (MFC)05.11.2003. u 14:21 - pre 248 meseci
Problem je kako kreiras CEmail...
Code:

CEmail email;

Ako se ne varam, pointer na ovu instancu prosledjujes konstruktoru tvog dijaloga. E, ali sta cemo sa GarbageColector-om (DragiTata ne voli ovaj naziv)? Sa gornjom deklaracijom, cim izadjes iz nekog scope-a (mislim na par zagrada { } ), GC ubije instancu CEmail-a, i onda tvoj dijalog ima pointer na mrtav objekat (to jest, na parce memorije koje je nekad bilo taj objekat).
Resenje je da zamenis gornju liniju sa
Code:

CEmail *email = new CEmail; // kreiranje na heap-u

i onda to prosledis konstruktoru tvog dijaloga. Ali, onda dijalog mora da preuzme na sebe i unistavanje istog.
Pozdrav

Rajko
 
Odgovor na temu

mipko

Član broj: 11015
Poruke: 109
*.panet.co.yu



Profil

icon Re: Pointer na CDilalog (MFC)19.12.2003. u 11:08 - pre 246 meseci
u C++ ?!

Citat:
Rapaic Rajko:
E, ali sta cemo sa GarbageColector-om (DragiTata ne voli ovaj naziv)?

 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Pointer na CDilalog (MFC)19.12.2003. u 16:02 - pre 246 meseci
Rajko stack naziva Garbage Colectorom.
 
Odgovor na temu

mipko

Član broj: 11015
Poruke: 109
*.yubc.net



Profil

icon Re: Pointer na CDilalog (MFC)22.12.2003. u 09:03 - pre 246 meseci
Jel se on to samo ludo zeza ili... ?

Citat:
Dragi Tata:
Rajko stack naziva Garbage Colectorom.

 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
80.93.225.*



+62 Profil

icon Re: Pointer na CDilalog (MFC)25.12.2003. u 09:51 - pre 246 meseci
Ne, ne zezam se.
U klasicnom smislu (iz vremena DOS-a i struktuiranog programiranja), stack je memorija po kojoj se seta stack pointer (tako se bese zove) i nista vise. Znaci, kad kompajler oslobadja stack, jednostavno spusti SP za odredjeni broj bajtova, i to je sve.
Medjutim...u C++-u nije (samo) tako. Ili, jeste, ali osim spustanja SP-a (recimo, priliskom izlaska iz nekog scope-a), kompajler poziva i destructor-e svih objekata koji su se nalazili na stack-u iznad SP-a, a to, priznacete, predstavlja malo vecu funkcionalnost u odnosu na "klasican" stack. Pogotovo ako se u tim destructor-ima vrse dodatne akcije; na primer, unistavanje sopstvenih sub objekata koji su kreirani na heap-u, i ko bi ga znao sta jos. Prema tome, danasnji stack je vrlo, vrlo sofisticiran instrument.
Posto to mene neodoljivo podseca na GC, tako ga (ponekad) i nazovem.
Pozdrav

Rajko
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16683
*.dip.t-dialin.net



+7169 Profil

icon Re: Pointer na CDilalog (MFC)25.12.2003. u 10:05 - pre 246 meseci
Citat:

Posto to mene neodoljivo podseca na GC, tako ga (ponekad) i nazovem.


Ja bih ipak vise voleo da se ovde koristi "stack" - to sto u nekim aspektima C++ koriscenje stacka podseca na neki GC ga svakako ne cini GC-om :) Sve dok je moguce alocirati memoriju sa 'new' koja nece biti dealocirana automatski, to se nikako ne moze nazvati GC-om i mislim da pravi nepotrebnu konfuziju.


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

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
80.93.225.*



+62 Profil

icon Re: Pointer na CDilalog (MFC)29.12.2003. u 13:18 - pre 246 meseci
Citat:
Ivan Dimkovic:
Ja bih ipak vise voleo da se ovde koristi "stack" - to sto u nekim aspektima C++ koriscenje stacka podseca na neki GC ga svakako ne cini GC-om :) Sve dok je moguce alocirati memoriju sa 'new' koja nece biti dealocirana automatski, to se nikako ne moze nazvati GC-om i mislim da pravi nepotrebnu konfuziju.


New...? Kakve veze "new" ima sa stack-om? Valjda ima veze sa heap-om...

Ali ajde bas, kad si ga pomenuo, da to udenem u kontekst cele price. Sve sto se alocira sa new (na heap-u, jasno), mora da se eksplicitno unisti sa delete. Ovo "eksplicitno" znaci svojerucnom akcijom programera; nema ko drugi to da uradi; i to je upravo razlika u odnosu na stack.
Na stack-u radi automatizam. Ako deklarisem u nekom scope-u u nekoj funkciji instancu klase, automatski sam je kreirao (default konstruktorom, recimo) NA STACK-u, i cim izadjem iz scope-a, instanca se automatski unistava, bez specijalnog koda za to.
Necu da gnjavim vise na ovu temu. Slazemo se da stvari rade upravo onako kako i rade, a kako cemo to nazivati - ma to je vec stvar ukusa.

Sto se mene tice, moj ukus je - apatinsko pivo i dobro crno vino, obzirom da nastupaju praznici, pa kad izbistrim utiske (i glavu), mozemo da nastavimo diskusiju...
Pozdrav

Rajko
 
Odgovor na temu

[es] :: C/C++ programiranje :: Pointer na CDilalog (MFC)

[ Pregleda: 3822 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

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