Italia
Foro

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)

EndPr
'*****************************************************************************************
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 potrebbe 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 per 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  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

4.918 Views

Untitledvor 0 min.
Matzbub03.02.2024
Sven Bader06.07.2023
p.specht19.11.2018
Ernst17.05.2016
Di più...

Themeninformationen

Dieses Thema hat 2 subscriber:

Ernst (2x)
Nico Madysa (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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