Grafik Forsvinder når vinduet kommer ud af fokus

Tags:    c++

Davs... har lavet et fikst lille tegne program.. men jeg har et problem... alt Grafikken forsvinder når vinduet kommer ud af fokus eller bliver resized... så jeg ville lige høre hvordan man kan gemmer den grafik der allerede er blevet lavet så jeg senere kan kalde det.. så når grafikken forsvinder så kan jeg kalde den grafikken igen så det ikke forsvinder alligevel... (Sry for den dårlig formulerede sætning :) )

Anyway hvis der er en der ved hvordan jeg kan gøre dette.. så skriv endelig evt noget eksempel på noget kode...

ps. sig til hvis jeg skal skrive min kode.. :)
pps. det er Win32 programmering





mvh. Kristian Nissen.

~Den der ler sidst... tænker langsomt!~

[Redigeret d. 18/06-04 16:58:28 af Kristian]

[Redigeret d. 18/06-04 16:59:35 af Kristian]



9 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Hej
Det lyder på mig som om du ikke tegner din grafik det rigtige sted i dit program.

Jeg tror nok den methode hvor du skal indsætte din tegne kode skal hede wm_onDraw eller WM_OnPaint i Viewet hvis det er MFC. Ellers skal du reagere på den besked der tager sig af at gentegne dit Window. (OnPaint eller sådan noget).

Det skulle være alt. Flyt din kode til at ligge i den rigtige CallBack methode....

Tror jeg
Med Venlig Hilsen
Janus S. Andersen





Hej
Det lyder på mig som om du ikke tegner din grafik det rigtige sted i dit program.

Jeg tror nok den methode hvor du skal indsætte din tegne kode skal hede wm_onDraw eller WM_OnPaint i Viewet hvis det er MFC. Ellers skal du reagere på den besked der tager sig af at gentegne dit Window. (OnPaint eller sådan noget).

Det skulle være alt. Flyt din kode til at ligge i den rigtige CallBack methode....

Tror jeg
Med Venlig Hilsen
Janus S. Andersen



Well det er ikke MFC men WINAPI..
og det jeg har gjort er at ligge koden i
WM_MOUSEMOVE:
også tjekker jeg hele tiden efter om Venstre Musetast bliver trykket..
Du kan lige få koden her..

<pre>

LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
case WM_MOUSEMOVE:

{
if(GetAsyncKeyState(VK_LBUTTON)) {

//kode til at tegne
}
}

// De andre cases..
}
}



mvh. Kristian Nissen.

~Den der ler sidst... tænker langsomt!~

[Redigeret d. 18/06-04 18:42:03 af Kristian]



Ok.

Du kan prøve at køre funktionen InvalidateDate(true);
lige efter du har tegnet din tegning. Hvis tegningen forsvinder, er det fordi der skal tegnes til vinduet et andet sted.

Du kan også prøve at bruge setTimer(500,.......); og i dennes calBack ligge den kode der tegner din tegning. (Dette vil nok ikke se så pænt ud)

Med Venlig Hilsen
Janus S. Andersen







Ok.

Du kan prøve at køre funktionen InvalidateDate(true);
lige efter du har tegnet din tegning. Hvis tegningen forsvinder, er det fordi der skal tegnes til vinduet et andet sted.

Du kan også prøve at bruge setTimer(500,.......); og i dennes calBack ligge den kode der tegner din tegning. (Dette vil nok ikke se så pænt ud)

Med Venlig Hilsen
Janus S. Andersen




Hmm... hvilken header er InvalidateDate(); defineret i?
har prøvet at søge på msdn.. men ingen resultater..


mvh. Kristian Nissen.

~Den der ler sidst... tænker langsomt!~



Ok.

Du kan prøve at køre funktionen InvalidateDate(true);
lige efter du har tegnet din tegning. Hvis tegningen forsvinder, er det fordi der skal tegnes til vinduet et andet sted.

Du kan også prøve at bruge setTimer(500,.......); og i dennes calBack ligge den kode der tegner din tegning. (Dette vil nok ikke se så pænt ud)

Med Venlig Hilsen
Janus S. Andersen




Hmm... hvilken header er InvalidateDate(); defineret i?
har prøvet at søge på msdn.. men ingen resultater..


mvh. Kristian Nissen.

~Den der ler sidst... tænker langsomt!~



Davs... har lavet et fikst lille tegne program.. men jeg har et problem... alt Grafikken forsvinder når vinduet kommer ud af fokus eller bliver resized... så jeg ville lige høre hvordan man kan gemmer den grafik der allerede er blevet lavet så jeg senere kan kalde det.. så når grafikken forsvinder så kan jeg kalde den grafikken igen så det ikke forsvinder alligevel...


I Windows er man nød til selv at huske hvad man har tegnet og så tegne det hele igen ved WM_PAINT, f.ex:

Fold kodeboks ind/udKode 





Endnu engang kommer Bertel Brander til undsætning.... TAKKER!! :D
en skam du ikke vil have point :/


fandt også ud af at den Invalidate() funktion Janus sagde jeg skulle bruge kun er til Frameworks såsom MFC...




mvh. Kristian Nissen.

~Den der ler sidst... tænker langsomt!~

[Redigeret d. 18/06-04 21:06:00 af Kristian]



Man kan også bruge InvalidateRect i Win32Api apps:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/pantdraw_7ano.asp

Den bevirker at hele (eller dele af) vinduet bliver "invalid" hvilket vil få Windows til at sende en WM_PAINT.



.



t