| |
|
|
Ernst | zuerst mal der TestCode KompilierenMarkierenSeparieren {$Iq}
Set("ErrorLevel",2)
Set("FastMode",1)
Declare WndClass#
Declare hwndClass$
Declare hwndName$
Struct myWindowClass = ~WNDCLASS
Dim WndClass#,myWindowClass
Declare msg#
struct tmsg = ~msg
Dim msg#,tmsg
hwndClass$ = "mywindow"
hwndName$ = "Test_Fenster"
'*****************************************************************************************
Proc WinMain
With WndClass#
.style& = ~CS_HREDRAW | ~CS_VREDRAW
.lpfnWndProc& = ProcAddr(Fensterproc,4)
.cbClsExtra& = 0
.cbWndExtra& = 0
.hInstance& = %hInstance
.hIcon& = ~LoadIcon(0,~IDI_Winlogo)
.hCursor& = ~LoadCursor(0, ~IDC_ARROW)
.hbrBackground& = ~createsolidbrush(RGB(150,150,150))
.lpszMenuName& = 0
.lpszClassName& = Addr(hwndClass$)
EndWith
~RegisterClass(WndClass#)
dispose wndclass#
var hwnd& = ~CreateWindowEx(0,Addr(hwndClass$),Addr(hwndName$),$02CA0000,100,100,1000,700,0,0,%hInstance,0)
~ShowWindow(hwnd&, ~SW_SHOWNORMAL)
While ~GetMessage(Msg#, 0, 0, 0) > 0
~TranslateMessage(Msg#)
~DispatchMessage(Msg#)
EndWhile
EndProc
'*****************************************************************************************
WinMain
dispose msg#
END
' ****************************************************************************************
nProc FensterProc
Parameters Wnd&, Message&, wParam&, lParam&
Var wDC&=~getDC(wnd&)
IF message& = ~WM_CLOSE
~PostQuitMessage(0)
ElseIf message& = ~wm_mousemove
LONG hv=dim(16)
setlong(hv&,0,16)
setlong(hv&,4,~TME_HOVER | ~TME_LEAVE)
setlong(hv&,8,wnd&)
setlong(hv&,12,~HOVER_DEFAULT)
~TrackMouseEvent(hv&)
dispose(hv&)
' test_1(wDC&,wnd&)
ElseIF message& = ~wm_mousehover
test_1(wDC&,wnd&)
ElseIF message& = ~wm_mouseleave
test_2(wDC&,wnd&)
EndIf
Return ~DefWindowProc(Wnd&, Message&, wParam&, lParam&)
EndProc
'*****************************************************************************************
nproc test_1
Parameters wDC&,Wnd&
LONG c_rect=Dim(16)
LONG text=dim(255)
~GetClientRect(Wnd&,c_rect)
~DeleteObject(~SelectObject(wDC& ~CreateSolidBrush(rgb(0,255,0))))
~DeleteObject(~SelectObject(wDC&, ~CreatePen(~PS_SOLID, 1,rgb(0,255,0))))
~RoundRect(wDC&, 400, 300, LONG(c_rect,8)-300,long(c_rect,12)-300, 20, 20)
~SetBkMode(wDC&, ~TRANSPARENT)
~SetTextColor(wDC&,rgb(255,255,0))
~GetWindowText(Wnd&, Text, ~globalsize(Text)-1)
~DrawTextEx(wDC&,Text,Len(STRING$(Text,0)),c_rect,~DT_SINGLELINE | ~DT_VCENTER | ~DT_CENTER,0)
dispose(c_rect)
dispose(text)
EndProc
' ----------------------------------------------------------------------------------------
nproc test_2
Parameters wDC&,Wnd&
LONG c_rect=Dim(16)
~GetClientRect(Wnd&,c_rect)
~DeleteObject(~SelectObject(wDC& ~CreateSolidBrush(rgb(255,255,0))))
~DeleteObject(~SelectObject(wDC&, ~CreatePen(~PS_SOLID, 1,rgb(255,255,0))))
~RoundRect(wDC&, 400, 300, LONG(c_rect,8)-300,long(c_rect,12)-300, 20, 20)
dispose(c_rect)
EndProc
'*****************************************************************************************
wenn ich die Maus ununterbrochen innerhalb des Fensters bewege (muß nicht schnell sein) so gibt es nach ca. 15 bis max. 30 sec folgende Situationen: a/ roundrect (grün) friert ein (wechselt nicht nach gelb , wenn die Maus außerhalb des Fensters ist) b/ roundrect (grün) wird links oberhalb in weiß nochmal abgebildet. wenn ich dieser Situtation (bei beiden Möglichkeiten) das Fenster verschieben will gibt es die wüstesten Bildschirmeffekte. es ist auch egal ob ich test_1 unter wm_mousemove oder wm_mousehover aufrufe; irgendwo klar, da ja beide messages bei Mausbewegungen andauernd gefeuert werden, aber das dürfte doch nur ein extremes Flackern des roundrect hervorrufen. Hab ich da irgendwas übersehen ?? |
|
|
| |
|
|
|
Nico Madysa | Habe den Quelltext gerade nur überflogen, aber wenn du dir ein Handle mit GetDC geben lässt, musst du es nicht hinterher auch mit ReleaseDC wieder freigeben?
[OFFTOPIC] Blöder Kommentar am Rande: Wenn dein XProfan-Quelltext so aussieht, kannst du auch gleich C oder C++ schreiben. [/OFFTOPIC] |
|
|
| |
|
|
|
Ernst | Ernst (17.05.14)
Hab ich da irgendwas übersehen ??
@Nico Uiuiuiui - und wie ich was übersehen habe - Danke für deinen Aufklärungsflug (ich hätte es sicher noch stundenlang übersehen)
[OFFTOPIC] dein blöder Kommentar am Rande ist nicht so blöd, aber wegen der nProcs verwende ich doch vermehrt APIs [/OFFTOPIC] |
|
|
| |
|
|