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:



Vlastní parametry pro Dialog

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Vlastní parametry pro Dialog

Autor: 0xenon

11:29:43 31.10.2010

kdyz jsem tohle resil, tak se mi osvedcila metoda SetProp/GetProp

Citovat příspěvek

 

Vlastní parametry pro Dialog

Autor: pepak

9:41:09 31.10.2010

Vytvářím si vlastní Dialog (DialogBoxParam nebo CreateDialogParam). Tenhle Dialog bude pochopitelně mít svoji DlgProc (proceduru, která přijímá a zpracovává zprávy) a přirozeně bych rád, aby ta procedura existovala jen jedna a mohlo ji používat víc instancí toho samého dialogu. Tudíž v té proceduře potřebuju nějak k danému HWND (dostanu jako součást zprávy) dohledat pointer na nějakou svoji datovou strukturu. Otázka zní, jakým způsobem to udělat? Co jsem to zkoumal, zdá se mi, že jsou dvě možné cesty:

1) Udržovat si nějaký statický seznam, kam budu při vytvoření dialogu ukládat dvojice (HWND, UživPointer). Při ukončení dialogu zase tu dvojici smažu a při každé zprávě, ve které budu potřebovat UživPointer, projdu celý ten seznam a budu hledat svůj HWND.

2) Ten můj uživatelský pointer zapíšu do properties dialogu pomocí API funkce SetProp a načtu ho pomocí GetProp.

Obě cesty jsou možné, protože do WM_INITDIALOG ještě dokážu ten uživatelský pointer dostat, mám tam už k dispozici HWND a tudíž by neměl být problém tyhle dvě hodnoty prvním nebo druhým způsobem spojit. Ve všech dalších zprávách pak mám k dispozici HWND a to už mi stačí k dohledání UživPointer - třeba k tomu, abych ho ve WM_CLOSE zase z uloženého seznamu vymazal.

Je nějaký důvod, proč preferovat jeden způsob před druhým? Takhle navenek se mi zdá druhá cesta (SetProp/GetProp) jednodušší, zejména kdybych uvažoval o víc threadech, ale třeba tam je nějaká speciální gotcha? Případně, je nějaká ještě lepší cesta, jak dosáhnout téhož? (Že bych třeba měl nějaký skrytý label a nacpal ten pointer do jeho captionu...)

Citovat příspěvek

 

 

 

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

Uživatelské jméno:

Heslo: