Deutsch
Forum

mousemove

 

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 ??
 
17.05.2014  
 




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]
 
17.05.2014  
 




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]
 
17.05.2014  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.824 Betrachtungen

Unbenanntvor 0 min.
Matzbub03.02.2024
Sven Bader06.07.2023
p.specht19.11.2018
Ernst17.05.2016
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Ernst (2x)
Nico Madysa (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie