MFC (C++) problem

poruka: 11
|
čitano: 1.444
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
neaktivan
offline
MFC (C++) problem

Poštovani puče,

radim aplikaciju koja će pretraživati računalo i moći će se odabrati neka slikovna datoteka i ona će se prikazati u mojoj aplikaciji, moći će se vidjeti neki podaci o njoj i sl.- dakle Preglednik slika.

Koristim CMFCShellTreeCtrl i ShellListCtrl  za odabir datoteka (poput File Explorera) te imam 2 View-a (View/Document arhitektura, SDI ). Cilj je odabrati slikovnu datoteku na prvom View-u (ShellListCtrl) te je prikazati na drugom View-u. Problem je što ja zovem UpdateAllView u prvom View-u te trebam poslati putanju do odabrane datoteke drugom View-u. Kako poslat CString preko UpdateAllView (u drugom argumentu koji je LPARAM lHint) te kako ga primiti u OnUpdate funkciju u drugom View-u te convertitati LPARAM u CString? Znam da je to zastarjela tehnologija ali moram napraviti taj projekt za faks? 

 

Lijep pozdrav svima! :D

Ressistance is futile!!!
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: MFC (C++) problem
pele90 kaže...
Kako poslat CString preko UpdateAllView (u drugom argumentu koji je LPARAM lHint) te kako ga primiti u OnUpdate funkciju u drugom View-u te convertitati LPARAM u CString? Znam da je to zastarjela tehnologija ali moram napraviti taj projekt za faks? 

 

Lijep pozdrav svima! :D

LPARAM (kao i WPARAM) je uvijek dovoljno velik da u njega možeš strpati pokazivač. Dakle stvar je jednostavna: pokazivač na CString pošalji kao LPARAM (castaj ako je potrebno), te onda u drugoj funkciji castaj iz LPARAM natrag u CString, i to je to.

To understand what recursion is, you must first understand recursion.
14 godina
offline
MFC (C++) problem

Hm, ako sam te dobro razumio aplikacija ti ima lijevo stablo, a desno view u koji bi ti prikazao selektiranu sliku ili neke info o njoj. Ti trebaš u desnom view-u (treectrl) stavit handler na onclick (ondblclick, zavisi što hoćeš) i tada uhvatiti putanju selektiranog item-a. Tu putanju spremaš u CString i zovi neku funkciju u MainFrm-u koja će tu putanju (CString) prosljediti funkciji desnog view-a koja će opet znati dohvatiti što joj treba sa te putanje.

 

Malo je teško pomoći ti kad nemam sve informacije, ali svakako MainFrame je dio koji 'zna' za oba view-a i može komunicirati s jednim i drugim. Preko pristupnih modifikatora ili eksternih objekata može se ostvariti direktna komunikacija između dva view-a ali kažem pre malo je to info-a.

Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: MFC (C++) problem

To sam i prvo probao...ali....ne mogu castat iz LPARAM u CString....mogu samo u CString* (odnosi se na prvi odgovoreni post ):D

Ressistance is futile!!!
Poruka je uređivana zadnji put pon 21.7.2014 20:22 (pele90).
12 godina
neaktivan
offline
Re: MFC (C++) problem

Pa pokazivač na CString ti i je potreban, jer si ga takvog poslao preko LPARAM.

12 godina
neaktivan
offline
MFC (C++) problem

Ne sjećam se baš MFC-a, no ovako nekako bi mogao poslati CString funkciji:

 

(LPARAM)(LPCTSTR)CStringObjekt;

Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: MFC (C++) problem
pele90 kaže...

To sam i prvo probao...ali....ne mogu castat iz LPARAM u CString....mogu samo u CString* (odnosi se na prvi odgovoreni post ):D

Da zaboravio sam napomenuti da onda LPARAM castaš u natrag u pokazivač na CString. Mislio sam da se to podrazumijeva, my bad xD

Royalhero je reagirao na vrijeme...

To understand what recursion is, you must first understand recursion.
13 godina
neaktivan
offline
Re: MFC (C++) problem
royalhero kaže...

Pa pokazivač na CString ti i je potreban, jer si ga takvog poslao preko LPARAM.

Istina...međutim treba mi CString koji je argument GDI konstruktoru Image klase. Dakle u PreviewView-u u OnUpdate funkciji primam LPARAM u kojem je CString pointer...i sad ja trebam u member varijablu tipa CString staviti taj LPARAM. Ako mi je member pointer onda ne može ići u Image konstruktor....ako me kužite...:D

Ressistance is futile!!!
16 godina
neaktivan
offline
MFC (C++) problem

Nisam baš shvatio što te muči, uglavnom možeš poslati CString* i kao treći parametar od UpdateAllViews(). Ako nisi siguran koliko dugo ti "žive" stringovi, pointeri i slično, izbjegavaj PostMessage() i nastoj čuvati podatke kao CString umjesto LPCTSTR ili LPARAM (... koji mogu pokazivati na nešto što je već dealocirano).

 

Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: MFC (C++) problem
DigiMagic kaže...

Nisam baš shvatio što te muči, uglavnom možeš poslati CString* i kao treći parametar od UpdateAllViews(). Ako nisi siguran koliko dugo ti "žive" stringovi, pointeri i slično, izbjegavaj PostMessage() i nastoj čuvati podatke kao CString umjesto LPCTSTR ili LPARAM (... koji mogu pokazivati na nešto što je već dealocirano).

 

Jasno mi je to. Ovakvu situaciju imam. Na prvom View-u se nalazi list kontrola. Kad se odabere neki item u kontroli ja uzmem njegov path, spremim ga u CString* strPath te pozovem UpdateAllView(this, (LPARAM)strPath). U drugom View-u (koji treba prikazat odabrani item koji je Image) u OnUpdate primam taj LPARAM strPath...i trebam ga spremit u member varijablu tog View-a. E sad, ako je member CString* onda ga ne mogu proslijediti kao argument konstruktoru Image klase a ona mi treba da bih nacrtao na taj View odabrani item odnosno sliku. Image klasa je iz GDI library. Ako mi je member CString onda ne mogu castat LPARAM u CString. 

Nadam se da sam uspio objasniti situaciju. 

 

LP :D

Ressistance is futile!!!
16 godina
neaktivan
offline
MFC (C++) problem

Ako je ovdje ovako:

 

CString strPath = uzmi_iz_list_kontrole();

UpdateAllView(this, (LPARAM)(LPCTSTR)strPath)

 

... onda bi otprilike ovo trebalo raditi:

 

OnUpdate ( LPARAM l_zapravo_string )

{

  LPCTSTR psz_kastan = (LPCTSTR) l_zapravo_string;

  CString member_ili_lokalna = psz_kastan;

  Image image ( member_ili_lokalna );

}

 

Moj PC  
2 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice