| |
|
|
| MinMax Beispiel Fenstergröße beschränken. KompilierenMarkierenSeparierenSet(FastMode,1)
Def _cwp(5) !user32,CallWindowProcA
Def _mm(3) !KERNEL32, RtlMoveMemory
declare _ex%,_owp&,_hwnd&
windowstyle ( 1 | 2 | 4 | 8 | 16 | 512 )
_hwnd&:=createwindow(0,,0,0,640,480)
_owp&:=External(user32,SetWindowLongA,_hwnd&,-4, Procaddr(_wproc,4))
whilenot _ex%
getmessage
wend
End
Proc _wproc
Parameters Wnd&, Msg&, Wparam&, Lparam&
If (Msg&==16)// close
_ex%:=1
Elseif (Msg& == 3)// move
Elseif (Msg& == 5)// size
_redrw
elseif (msg& == 36)// getminmaxnfo
pokedw lparam&+24,400
pokedw lparam&+28,200
Elseif (Msg& == 15)// paint
_redrw
Elseif (Msg& == 256)// keydwn
Elseif (Msg& == $108)// keylast
Elseif (Msg& == 522)// wheel
If (Wparam&>0)
Else
Endif
Endif
Return _cwp(_owp&,Wnd&, Msg&, Wparam&, Lparam&)
Endproc
Proc PokeDW
Parameters adr&, V!
Declare V&
_mm(adr& + 2,Addr(V&),2)
v&:=Int(V!-(V&*2^16))
_mm(adr&,Addr(V&),2)
EndProc
Proc _redrw
Endproc
Viel Spaß damit, Salve. |
|
|
| |
|
|
|
Julian Schmidt | Geht das auch ohne XPSE und Procaddr? |
|
|
| ˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗ Webseite [...] | 16.07.2011 ▲ |
|
|
|
|
| Mittlerweile schon wenn auch nicht 100% zuverlässig -
musst ja nur in die SubClassProc sowas schreiben wie ... KompilierenMarkierenSeparieren-
in 2005 gabs noch keine xprofansche SubClassProc.
100% zuverlässig gehts aber auch heute noch nur mit XPSE oder eben indem Du sonstwie nativen Code als wndProc hinterlegst. |
|
|
| |
|
|
|
Julian Schmidt | Inwiefern funktioniert das ohne ProcAddr? KompilierenMarkierenSeparierenSet("FastMode",1)
Def cwp(5) !"user32","CallWindowProcA"
Def mm(3) !"KERNEL32", "RtlMoveMemory"
declare ex%,owp&,hwnd&
var minx%=400
var miny%=300
windowstyle ( 1 | 2 | 4 | 8 | 16 | 512 )
hwnd&=Create("Window",0,"",0,0,0,0)
owp&=External("user32","SetWindowLongA",hwnd&,-4, Procaddr(wproc,4))
whilenot ex%
getmessage
Endwhile
End
Proc wproc
Parameters Wnd&, Msg&, Wparam&, Lparam&
If (Msg&==16)// close
ex%:=1
Elseif (Msg& == 3)// move
Elseif (Msg& == 5)// size
redrw
elseif (msg& == 36)// getminmaxnfo
long lparam+24=minx%
long lparam+28=miny%
Elseif (Msg& == 15)// paint
redrw
Elseif (Msg& == 256)// keydwn
Elseif (Msg& == $108)// keylast
Elseif (Msg& == 522)// wheel
If (Wparam&>0)
Else
Endif
Endif
Return cwp(owp&,Wnd&, Msg&, Wparam&, Lparam&)
Endproc
Proc PokeDW
Parameters adr&, V!
Declare V&
mm(adr& + 2,Addr(V&),2)
v&:=Int(V!-(V&*2^16))
mm(adr&,Addr(V&),2)
EndProc
Proc redrw
Endproc
|
|
|
| ˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗ Webseite [...] | 16.07.2011 ▲ |
|
|
|
|
| Inwiefern ist das relevant?
Die Antwort auf Deine ursprüngliche Frage ist: SubClassProc
"Deinen" bisherigen Code kannst Du komplett verwerfen. |
|
|
| |
|
|