Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Fundin
Založen: 19. 08. 2007 Příspěvky: 51 Bydliště: Praha
|
Zaslal: 16. září 2008, 17:00:26 Předmět: Blikani aplikaci |
|
|
Mam takovej malej problem...a to ze mi pri rendrovani blikaj ostatni aplikace a menu, ale nejsem schopnej si s tim poradit. Rendruju pomoci PeekMessage() ale to nevim jestli je tak dulezity, takze kdyby jste nekdo mel nejakou radu tak budu moc vdecnej:) |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 16. září 2008, 17:11:56 Předmět: |
|
|
Můžeš to blíkání nějak podrobněji specifikovat? _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 16. září 2008, 19:34:05 Předmět: |
|
|
Jelikož jsi pořádně nepopsal tvůj problém, mohu jen spekulovat, ale dělo se mi něco podobného a to když jsem jako vykreslovací plátno nastavil hlavní formulář a na formuláři jsem měl nějaké menu. Poté docházelo k blikání. Možná je to zcestný, pokud ano tak to ignoruj
Měl by jsi mít plátno pro vykreslení staovené na nějaký samostatný prvek, form nebo panel, pokud budeš používat jakékoliv menu a komponenty, musíš si ošetřit jejich refresh a i tak to nevypadá nic moc, ale alespoň to nebliká. |
|
Návrat nahoru |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 16. září 2008, 20:11:37 Předmět: |
|
|
Blikání ostatních oken se mi někde děje v systému např. při refreshi mmc konzole když probíhá nějaká zátěž (typicky db skript vytěžuje jedno jádro CPU), přičítám to ale 2 monitorům a desktop sidebaru (ten si zase problikává u některých fullscreen her). Možná dochází k invalidate regionů a už se kvůli vytížení nestíhá překreslovat, kdo ví _________________
|
|
Návrat nahoru |
|
|
Fundin
Založen: 19. 08. 2007 Příspěvky: 51 Bydliště: Praha
|
Zaslal: 16. září 2008, 20:35:28 Předmět: |
|
|
Dobre, nasledujici problem se mi objevil na WinXP, MDX, a C#...vykresluju do Panelu, kterej je umistinej na formulari na kterym je Menu a kdyz vyberu nejakou polozku toho menu, tak se zacne trhat zobraovani. A to "blikani" se neprojevuje u vsech aplikaci. A vetsinou to je treba u polopruhlednejch oken a nebo u ToolTipu a podobnejch poli. Jinak vykresluju pomoci tohodle kodu:
kód: |
private void OnApplicationIdleEvent(object sender, EventArgs e)
{
while (AppStillIdle())
{
Render();
}
}
private bool AppStillIdle()
{
ExternDll.Message msg;
return !ExternDll.PeekMessage(out msg, IntPtr.Zero, 0, 0, 0);
}
|
|
|
Návrat nahoru |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 16. září 2008, 20:43:55 Předmět: |
|
|
Fundin napsal: |
Dobre, nasledujici problem se mi objevil na WinXP, MDX, a C#...vykresluju do Panelu, kterej je umistinej na formulari na kterym je Menu a kdyz vyberu nejakou polozku toho menu, tak se zacne trhat zobraovani. A to "blikani" se neprojevuje u vsech aplikaci. A vetsinou to je treba u polopruhlednejch oken a nebo u ToolTipu a podobnejch poli. Jinak vykresluju pomoci tohodle kodu:
kód: |
private void OnApplicationIdleEvent(object sender, EventArgs e)
{
while (AppStillIdle())
{
Render();
}
}
private bool AppStillIdle()
{
ExternDll.Message msg;
return !ExternDll.PeekMessage(out msg, IntPtr.Zero, 0, 0, 0);
}
|
|
Předpokládal bych že vykrelsuješ nekonečnou smyčkou a pouze ošetřuješ WinApi. Já jsem to vyřešil když jsem chtěl používat menu, zastavil jsem vykreslování. Ale pokud potřeuješ vykreslovat neustále, pokus se nějak lépe ošetřit refresh ostatních komponent, třeba každý frame.. |
|
Návrat nahoru |
|
|
Khaj
Založen: 16. 01. 2008 Příspěvky: 49
|
Zaslal: 17. září 2008, 07:11:43 Předmět: Reseni |
|
|
Jediny reseni je presunout vsechny ne-panelovy komponenty z panelu, na kterej se kresli (a to na jiny panely).
Kresleni vsech komponent pri kazdym framu nepomuze, ale jen to zhorsi.
Tenhle problem nastava napr. i u Win Media Playeru minimalizovanyho na liste, ukazujiciho v okynku prave hranou skladbu, kdyz vyskoci nad DirectXovou aplikaci.
Proste Win kresleni nestiha DX kresleni, opozduje se a proto to blika.
Pokud chces mit zakomponovany menu do renderovaciho pohledu na scenu, musis ho kreslit taky DX nebo musi bejt na vlastnim panelu (... konkretne na necem zdedenym od TWinControl pokud delas v Borlandech jako ja ... a ten muze mit klidne jako rodice onen kreslici panel, to uz je jedno).
Ja osobne mam vzdycky menu a pohled do hry striktne oddeleny (mozna casem zacnu delat DX-kresleny prvky, ale na to je casu dost).
EDIT: Pokud si to myslel tak, ze blikani neni problem tvy aplikace, ale jinejch co lezou prez ni, jako u toho Win MP, tak to nevyresis (pokud nehodlas udelat nakou kontrolu a automaticky zavirat vsechny wokna co se opovazi vyskocit nad tvoje okno ). |
|
Návrat nahoru |
|
|
Fundin
Založen: 19. 08. 2007 Příspěvky: 51 Bydliště: Praha
|
Zaslal: 17. září 2008, 19:03:41 Předmět: |
|
|
To jste me asi spatne pochopily v panelu do ktereho se vykresluje neni zadne menu. Ale asi to bude fakt jak rikal Khaj ze to proste jen nestiha, jinak pro to nemam jiny vysvetleni:(
EDIT: Ale je to divny, protoze ikdyz vykresluju tri cary, tak to porad blika a to asi tolik nebere vykon. |
|
Návrat nahoru |
|
|
Fundin
Založen: 19. 08. 2007 Příspěvky: 51 Bydliště: Praha
|
Zaslal: 18. září 2008, 16:13:02 Předmět: |
|
|
VYRESENO: bylo to tim ze jsem na ten panel musel v iniciaci zarizeni odkazat na Handle a ne primo na Panel:) |
|
Návrat nahoru |
|
|
|