Schwieriges Ding "LRESULT CALLBACK WndProc"!

Previous topic - Next topic

Schranz0r

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...
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

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
...

Schranz0r

#2
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]
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello


Schranz0r

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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello


Schranz0r

Ja nur kommt WM_PAINT nur, wenn ich das Fenster minimiere und dann wieder Anzeige
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

oder neu gezeichnet werden soll
Wenn Du neuzeichnen Forcen willst, mach : InvalidateWindow(hwnd);

Schranz0r

hab ich gemacht gehabt.. NUR gibts da das problem WANN :)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Wann Du neuzeichnen willst. WM_TIMER ?

Schranz0r

wann wird WM_TIMER ausgel?st?

Nichtsdestotrotz hab ich das WndProc problem!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard