Az "induláskori" szöveget átírni a legegyszerübb a resource-ben.
Kicseréled a "Ready"-t a leghosszabb-ra, ami előfordulhat, (lehet space-k
sorozata is) így nem kell később a méretezésével foglalkozni, ami egyébként
sem túl szép látvány.
A futásidejű frissítésre nem egyszerű válaszolni. Ez attól függ, hogy mit
indikálsz. Ha események bekövetkezését, akkor pl. amikor az eseményt
lekezeled, onnan meghívhatod az UpdateStatus( ... ) vagy hasonló
függvényedet, a megfelelő paraméterekkel. Ha a dokumentum valamilyen egyéb
állapotát jelzed ki, akkor is meg tudod határozni azokat a helyeket, amikor
ez megváltozhat. Mindenképpen a CMainFrm-be tenném a frissítést végző
függvényt, mivel a StatusBar az övé, és a mainframe-et mindenhonnan látod. Ha
máshogy nem, az AfxGetMainWnd( )-vel biztosan. Ilyenkor arra figyelj, hogy
kényszerítsd rá a CMainFrm típust, mert az AfxGetMainWnd( ) CWnd* típust ad
vissza, és abban nincsen a te UpdateStatus( ) függvényed deklarálva. Tehát
valahogy így:
((CMainFrm*)(AfxGetMainWnd( )))->UpdateStatus( ... );
Ha mindenképpen Timer-es megoldásra van szükséged, akkor szerintem az is a
MainFrame-ben ketyegjen, és ekkor vagy globális változókon keresztül (ez nem
szép, de gyors megoldás) vagy függvényeken keresztül tudod megszerezni a
"megjelenítendőt". Pl. ha a doskid állapotát indikálod, akkor a
CValamiDoc-ban deklarálsz egy publikus GetDocStatus( ... ) vagy hasonló
függvényt, és amikor a Winfos (meglehetősen pontatlanul) a
TimerFunction-ödnek adja a vezérlést akkor onnan:
GetDocStatus( ... );
((CMainFrm*)(AfxGetMainWnd( )))->UpdateStatus( ... ); // a GetDocStatus(
)-ból nyert paraméterekkel;
vagy az UpdateStatus( ... ) maga is meghívhatja a
GetDocStatus( )-t ,csak ekkor már nem olyan képlékeny a dolog. Nem tudod pl.
az UpdateStatus( )-t megerőszakolni, hogy most mást mutasson, ezért én
inkább a két függvényhívásra szavazok.
Remélem segítettem.
Robi
On Wednesday 18 September 2002 07:33, HIX CODER
) wrote:
> Sziasztok!
>
> Van egy SDI appom, a dokumentum nezetosztalya a CFormView-bol
> szarmazik. Nem tudom mennyire redekes a problema szempontjabol,
> Szepen meg is jelenik a statusbar, a string resource tablaban
> szereplo AFX_IDS_IDLEMESSAGE tartalmaval (Ready).
> Betettem a CProjektneveDoc osztalyba a
> http://codeguru.earthweb.com/mfc/comments/23884.shtml
> cimen talalhato kodot, ami arra hivatott, hogy atirja nekem a
> statusbar feliratat. Sikerul is peldaul OnDocumentNew
> esemenykezelobol atirni a statusbart, viszont amikor elindul
> a progi, meg az eredeti "Ready" felirat diszeleg, majd amikor uj
> dokumentumot csinalok, akkor irja at, es nem tudom atirni se initinstance,
> se precreatewindow, se sehonnan mashonnan, hogy eredetileg is az altalam
> irt dinamikus szoveg jelenjen meg ott. (%s messages, %s unread)
> Kerlek mondjatok meg, hol a legjobb beallitani, illetve idonkent
> atirni, pl masodpercenkent a statusbart? MElyik osztalyba tegyem
> a fenti url-en levo fuggvenyt, illetve hova tegyek OnTimer-t?
>
|