Kreslení na obrazovku bez problikávání – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kreslení na obrazovku bez problikávání – .NET – Fórum – Programujte.comKreslení na obrazovku bez problikávání – .NET – Fórum – Programujte.com

 

4. 12. 2015   #1
-
0
-

Vykresluju globálně na obrazovku text. Časovač mám nastavený na 1ms a u normálních programů je to celkem v pořádku, ale u her při větších pohybech ten text neni ani vidět. Jde nějak jinak vykreslovat text (či cokoliv jinýho) bez toho, aniž by blikal? Neni třeba nějaká globální událost, která se volá když je obrazovka překreslování a mohl bych na ni navázat mou funkci?

Někde radili udělat neviditelný okno, a vykreslovat text na něj. Zatim jsem to nezkoušel, ale zcela určitě bude problém nad fullscreen DirectX hru dát okno a přenášet z nej všechny události do hry.

Nahlásit jako SPAM
IP: 93.91.154.–
Matěj Andrle+1
Grafoman
4. 12. 2015   #2
-
0
-

#1 David Klouček
DoubleBuffer (by měl postačit), (On)Paint, kernel messaging -> import C++... (Google dopoví)

Nahlásit jako SPAM
IP: 31.30.56.–
4. 12. 2015   #3
-
0
-

#2 Matěj Andrle
Double buffering asi nepomůže. Tady je problém s tim, že se jednou vykreslí ten muj text (nebo cokoliv jinýho) a hra ho vzápětí překreslí svym a takhle se to dokola tluče.

Nahlásit jako SPAM
IP: 93.91.154.–
Matěj Andrle+1
Grafoman
4. 12. 2015   #4
-
0
-

#3 David Klouček
Tak Paint, anebo se posaďte na systémovou zprávu.,..

Nahlásit jako SPAM
IP: 31.30.56.–
4. 12. 2015   #5
-
0
-

Jo, pro mě by bylo řešení asi tohle https://support.microsoft.com/en-us/kb/318804, jenže:

Global hooks are not supported in the .NET Framework

Except for the WH_KEYBOARD_LL low-level hook and the WH_MOUSE_LL low-level hook, you cannot implement global hooks in the Microsoft .NET Framework. To install a global hook, a hook must have a native DLL export to inject itself in another process that requires a valid, consistent function to call into. This behavior requires a DLL export. The .NET Framework does not support DLL exports. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically.

Low-level hook procedures are called on the thread that installed the hook. Low-level hooks do not require that the hook procedure be implemented in a DLL.

Nahlásit jako SPAM
IP: 93.91.154.–
Matěj Andrle+1
Grafoman
5. 12. 2015   #6
-
0
-

#5 David Klouček
Fuj! Global hook? Tak to na mne neházej - to jsem ti vůbec neradil! Zaprvé toto jde - jen jinak. Ovšem já ti radil poslouchat zprávy a jen připoslat další! Tak to ne - to ti C++ do rukou nedám. Hoď to do Paint a je klid. (Popř jiného předcházejícího, či následného eventu s tím, že samozřejmě musí někde zavolat base, ať se provede i ten zbytek.)

Nahlásit jako SPAM
IP: 31.30.56.–
5. 12. 2015   #7
-
0
-
Nahlásit jako SPAM
IP: 93.91.154.–
Matěj Andrle+1
Grafoman
5. 12. 2015   #8
-
0
-

#7 David Klouček
.NET je postavený na C++. Právě, že ty očividně programovat začínáš, tak tě neodesílám na C++ řešení, kteréžto stejně budeš implementovat v C#. Paint: https://msdn.microsoft.com/en-us/library/windows/desktop/dd145213(v=vs.85).aspx

Paint nesouvisí s .NET! Je to kernelová zpráva - ovšem mimo kernel messaging. Ta běží čistě na DirectX. Lze jít i na kernel messaging, ovšem tam bys očividně udělal pěkný čurbes. Zkus tedy poslouchat systémové zprávy a dostat se k DirectX...

Nahlásit jako SPAM
IP: 31.30.56.–
Matěj Andrle+1
Grafoman
5. 12. 2015   #9
-
0
-

#7 David Klouček
C++ má na tuto zprávu právě OnPaint a tuším, že to lze importovat do C#... (Proto se zmiňuji o base - respektivě předchozím kontextu.) To že zpráva nesouvisí s C# míním tak, že existuje daleko déle, než WindowsNT... :S

Nahlásit jako SPAM
IP: 31.30.56.–
5. 12. 2015   #10
-
0
-

#9 Matěj Andrle
To by mě zajímalo jak to napojit na cizí aplikaci. Když udělam třeba:
 

protected override void WndProc(ref Message m) {
    Debug.WriteLine(i.ToString() + " | " + m.ToString());
    base.WndProc(ref m);
}


tak to funguje jen v rámci mý aplikace. 

Nahlásit jako SPAM
IP: 93.91.154.–
Matěj Andrle+1
Grafoman
5. 12. 2015   #11
-
0
-

#10 David Klouček
Psal jsem - musíš importovat C++... Jako tohle je rovnou na C++, ovšem do toho nejdu. Sotva ti vysvětlím jak to udělat zde. Jukni na potřebné DLL importy - stačí zadat tu paint zprávu s C#...

Nahlásit jako SPAM
IP: 31.30.56.–
Matěj Andrle+1
Grafoman
5. 12. 2015   #12
-
0
-

#10 David Klouček
https://social.msdn.microsoft.com/Forums/vstudio/en-US/6064446e-00b5-4bc5-9103-cc0d24f79619/using-cdll-in-c-catching-wmpaintevent-in-net?forum=csharpgeneral

Nahlásit jako SPAM
IP: 31.30.56.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý