GLBasic forum

Other languages => GLBasic - de => Topic started by: Schranz0r on 2009-Apr-16

Title: Schwieriges Ding "LRESULT CALLBACK WndProc"!
Post by: Schranz0r on 2009-Apr-16
Hi Gernot.

Kann num mit der WinApi ein Fenster erstellen, bewegen und mit WndProc usw. auf dieses "zeichnen".

Jetzt stellt sich mir die Frage, da ich alles in eine Klasse gepackt hab, ob sich das "LRESULT CALLBACK WndProc" auch in diese reinwurschtel l?sst...

Hab igrendwo was gelesen mit einen Trick gehts, das man da einen Pointer auf WndProc macht usw... nur hab ich das wohl net ganz verstanden, wie die das genau meinen, weil das ?ber 10 Ecken war :D

Hast du ne idee?

Geh ich auch recht in der annahme das in der "festen WndProc" es auch reicht wenn da drin steht :

Code (glbasic) Select
...
    case WM_CLOSE:
       DestroyWindow(hWnd);
       break;

   case WM_DESTROY:
       PostQuitMessage(0);
       return 0;
..



Und ich dann mit PeekMessage die MSG's abgreife? hab da Funktionen gemacht:

Code (glbasic) Select
FUNCTION API_PeekMessage: win
INLINE
return PeekMessage(&cWin(win)->msg, cWin(win)->hWnd, 0, 0, PM_REMOVE);
ENDINLINE
ENDFUNCTION


FUNCTION API_Message_WM_MOUSEMOVE: win
INLINE
if (cWin(win)->msg.message == WM_MOUSEMOVE){
return 1;

}else{
return 0;
}

ENDINLINE
ENDFUNCTION


FUNCTION API_DispatchMessage: win
INLINE
DispatchMessage (&cWin(win)->msg);
ENDINLINE
ENDFUNCTION


in der WHILE-WEND Schleife frag ich dann so ab:

Code (glbasic) Select
Win1 = API_CreateWindow("Test")

LOCAL test$ = "NIX",i

WHILE TRUE


IF API_PeekMessage(Win1)
INC i,1
IF API_Message_WM_MOUSEMOVE(Win1)
test$ = "Maus wurde bewegt!"
ENDIF
API_DispatchMessage(Win1)
ENDIF
PRINT test$,10,10

PRINT i,10,30


SHOWSCREEN
WEND
END


geht auch soweit...
Title: Re: Schwieriges Ding "LRESULT CALLBACK WndProc"!
Post by: Kitty Hello on 2009-Apr-16
Warum gibtst Du nicht den Message Typ in Peek zur?ck?

WHILE TRUE
    PeekMessage(mein_message_type)
    SELECT mein_message_type.msg
        CASE WM_MOUSEMOVE
...
Title: Re: Schwieriges Ding "LRESULT CALLBACK WndProc"!
Post by: Schranz0r on 2009-Apr-16
War ja nur als Test gedacht   :nana:

Hab jetzt nurnoch das Problem mit Fenster aktualisieren und den wndproc f?r jedes Fenster!

Hier ein screen:



[attachment deleted by admin]
Title: Re: Schwieriges Ding "LRESULT CALLBACK WndProc"!
Post by: Kitty Hello on 2009-Apr-16
a Hund bist' scho!  =D
Title: Re: Schwieriges Ding "LRESULT CALLBACK WndProc"!
Post by: Schranz0r on 2009-Apr-16
Bin ich ja :D

Blo? der Hund brauch ein wenig Hilfe vom anderen Hund ;)
Wegen wndproc problem... wie man das am besten machen k?nnte...
Und wie man am besten Aktuallisiert ohne jeden Durchlauf alles neu zeichen zu m?ssen -> Flackert
Title: Re: Schwieriges Ding "LRESULT CALLBACK WndProc"!
Post by: Kitty Hello on 2009-Apr-17
Zeichnen, nur bei WM_PAINT
Title: Re: Schwieriges Ding "LRESULT CALLBACK WndProc"!
Post by: Schranz0r on 2009-Apr-17
Ja nur kommt WM_PAINT nur, wenn ich das Fenster minimiere und dann wieder Anzeige
Title: Re: Schwieriges Ding "LRESULT CALLBACK WndProc"!
Post by: Kitty Hello on 2009-Apr-17
oder neu gezeichnet werden soll
Wenn Du neuzeichnen Forcen willst, mach : InvalidateWindow(hwnd);
Title: Re: Schwieriges Ding "LRESULT CALLBACK WndProc"!
Post by: Schranz0r on 2009-Apr-17
hab ich gemacht gehabt.. NUR gibts da das problem WANN :)
Title: Re: Schwieriges Ding "LRESULT CALLBACK WndProc"!
Post by: Kitty Hello on 2009-Apr-18
Wann Du neuzeichnen willst. WM_TIMER ?
Title: Re: Schwieriges Ding "LRESULT CALLBACK WndProc"!
Post by: Schranz0r on 2009-Apr-18
wann wird WM_TIMER ausgel?st?

Nichtsdestotrotz hab ich das WndProc problem!