Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Od okna k dialogu

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Od okna k dialogu

Autor: pepak

9:58:26 19.11.2010

OK, pokud je jen jeden parent, není co řešit.

Citovat příspěvek

 

Re: Od okna k dialogu

Autor: Kra

19:17:48 16.11.2010

1) Okno muze mit jen jednoho parenta. Je na tobe, abys zajistil, ze to bude ten parent, ktery potrebujes

2) Pomale to nejspis pro tve ucely nebude, nicmene prece to nebudes volat pri kazde zprave, ale jen pri nekterych konkretnich. Ja jsem ve sve aplikacce definoval nazvy oken jako globalni konstanty a pak pouzivam FindWindow na zjisteni jejich handlu. Mozna to neni zcela nejlepsi reseni, ale ono to stejne nejde poznat, protoze ta konkretni zprava v mem pripade neni tak casta. Byt to neco ve stylu mousemove, tak asi pouziju globalni konstanty.

Citovat příspěvek

 

Re: Od okna k dialogu

Autor: pepak

18:13:43 16.11.2010

1) Zdá se mi divné, že by GetParent vrátil za každých okolností handle dialogu. Asi jsem deformován Delphi, protože automaticky předpokládám celou strukturu parentů, ne jen jednoho parenta.

2) Ten switch na konci by ovšem znamenal, že bych si musel udržovat nějaký seznam otevřených dialogů. To určitě nechci, pokud se tomu jen trochu půjde vyhnout. (Zatím to vypadá, že se jim jde vyhnout pomocí těch SetProp/GetProp - tím můžu i každému subclassnutému oknu podstčit ukazatel na moje uživatelská data. Otázka je, jak moc to bude rychlé, kdyby mělo začít chodit hodně zpráv.)

Citovat příspěvek

 

Re: Od okna k dialogu

Autor: Kra

12:25:22 16.11.2010

Nenapsals co presne chces udelat, ale v te subclassnute procedure vsech tech editboxu staci pro prislusnou editbox WM_zpravu udelat:
[code]
HWND hParent = GetParent(hWnd);
SendMessage (hParent, WM_DOTRICKS, 0, 0);
[/code]
Pokud potrebujes udelat jinou akci pro kazdy dialog tak to budes muset udelat treba pres switch:
[code]
HWND hParent = GetParent(hWnd);
switch (hParent)
{
case ghDialog1:
SendMessage (hParent, WM_DOTRICKS1, 0, 0);
break;
case ghDialog2:
SendMessage (hParent, WM_DOTRICKS2, 0, 0);
break;
}
[/code]

btw pisu z hlavy tak se omlouvam za jakekoli neprelozitelne chyby :)

Citovat příspěvek

 

Re: Od okna k dialogu

Autor: pepak

11:57:34 16.11.2010

Stejně se v tom nějak nemůžu vyznat.

To vážně musím v té subclassnuté window proceduře jet ve smyčce typu

do {
if (handle_je_handlem_meho_dialogu(Handle)) { ... nejake zpracovani; break; }
else Handle = GetParent(Handle);
} while (Handle <> NULL);

?? Kromě toho, že mi není úplně jasné, jak by vlastně vypadala funkce handle_je_handlem_meho_dialogu(), mi připadá, že když budu chtít něco takovéhleho provést pro každou zprávu, tak to přeci musí zabrat šíleného času. Nebo ne?

Citovat příspěvek

 

Re: Od okna k dialogu

Autor: pepak

5:12:22 11.11.2010

No tohle - ono to fakt existuje pod tímhle jménem. Docela zírám, čekal jsem to v nějakém zastrčeném koutu nějaké neintuitivně pojmenované funkce. Děkuji!

Citovat příspěvek

 

Re: Od okna k dialogu

Autor: Kra

22:24:09 10.11.2010

Jestli to dobre chapu, potrebujes handle parenta toho editu. V tom pripade - GetParent()

Citovat příspěvek

 

Od okna k dialogu

Autor: pepak

21:27:13 10.11.2010

Mám dialog, na kterém je nějaké okno, třeba edit (to je fuk). Já toto okno subclassnu (tzn. pomocí SetWindowLong s GWL_WNDPROC si zaregistruji svoji vlastní window proceduru, ve které budu zpracovávat zprávy). Ve své obsluze WndProc pak zachytím třeba zprávu WM_LBUTTONDOWN a mohu ji zpracovat. Potud dobré.

Ale dejme tomu, že mám dvě instance téhož dialogu a pro ten edit chci použít jednu společnou window proceduru. Edity jako takové identifikovat dokážu, protože každý bude mít jiný handle. Ale já bych potřeboval kromě samotného editu udělat i nějakou operaci s dialogem, na kterém ten edit leží, a tady se mi nějak nedaří přijít na to, jak to udělat - jak se z Handle okna dostat k Handle dialogu. Jediná cesta, kterou jsem zatím našel, spočívá v tom, že předem tomu editu pomocí SetProp předám handle dialogu, ale to mi přijde jako hodně zdlouhavé (při každé zprávě pomocí GetProp vyhledávat handle dialogu, to přece musí být hrozně pomalé). Není na to nějaká lepší cesta?

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: