[WinAPI] Ist Fenster aktiv? + Ist die Maus über dem Fenster?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

[WinAPI] Ist Fenster aktiv? + Ist die Maus über dem Fenster?

Beitrag von Mijikai »

Hänge mal wieder fest :freak:

Wie kann ich zuverlässig feststellen ob mein Fenster noch aktiv ist ?
Wenn es aktiv ist wie kann ich feststellen ob die Maus im Fenster ist ?

Hier mein Versuch mit WM_MOUSELEAVE
bestimmt gibt es besser Lösungen/Möglichkeiten

Mein WindowProc() Code:

Code: Alles auswählen

Procedure.i WindowProc(hwnd.i,message.i,wparam.l,lparam.l)
  With Base
    Select message
      Case #WM_DESTROY
        PostQuitMessage_(#Null)
        ProcedureReturn #Null

      Case #WM_MOUSEMOVE
        \Position\X = GetLoWord(lparam)
        \Position\Y = GetHiWord(lparam)
        ProcedureReturn #Null
        
        
      Case #WM_MOUSELEAVE
        Debug 123 ;< wird nur einmal beim Start aufgerufen!?
     
    EndSelect
    ProcedureReturn DefWindowProc_(hwnd,message,wparam,lparam)
  EndWith
EndProcedure
Für #WM_MOUSELEAVE hab ich das:

Code: Alles auswählen

Procedure.b InitMouseInput()
  Protected Mouse.TRACKMOUSEEVENT
  With Base
    Mouse\cbSize    = SizeOf(TRACKMOUSEEVENT)
    Mouse\dwFlags   = #TME_LEAVE
    Mouse\hwndTrack = \Window\Handle
    ProcedureReturn TrackMouseEvent_(@Mouse)
  EndWith
EndProcedure
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: [WinAPI] Ist Fenster aktiv? + Ist die Maus über dem Fens

Beitrag von RSBasic »

Ich habe einen eigenen Beispielcode geschrieben, mit dem es klappt:

Code: Alles auswählen

EnableExplicit

Procedure WinCallback(hWnd, uMsg, wParam, lParam) 
  Protected TRACKMOUSEEVENT.TRACKMOUSEEVENT
  
  Select uMsg
    Case #WM_MOUSEMOVE
      Debug "Maus innerhalb des Fensters"
      TRACKMOUSEEVENT\cbSize = SizeOf (TRACKMOUSEEVENT)
      TRACKMOUSEEVENT\dwFlags = #TME_LEAVE
      TRACKMOUSEEVENT\hwndTrack = hwnd
      TrackMouseEvent_(TRACKMOUSEEVENT)
    Case #WM_MOUSELEAVE
      Debug "Maus außerhalb des Fensters"
      
  EndSelect
  
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  SetWindowCallback(@WinCallback())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Oder fehlt dir was?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: [WinAPI] Ist Fenster aktiv? + Ist die Maus über dem Fens

Beitrag von Mijikai »

Danke @RSBasic

:shock:
Ich versteh nicht warum das immer aufgerufen werden muss...
also bei jeder #WM - Maus Nachricht!?
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: [WinAPI] Ist Fenster aktiv? + Ist die Maus über dem Fens

Beitrag von RSBasic »

Soweit ich weiß ja.

Mit GetForegroundWindow_() kannst du ermitteln, ob dein Fenster aktiv ist. Oder in PB GetActiveWindow().
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: [WinAPI] Ist Fenster aktiv? + Ist die Maus über dem Fens

Beitrag von Mijikai »

Habs jetzt so gelöst:

Code: Alles auswählen

 Case #WM_ACTIVATE
        \Window\Active = GetLoWord(wparam)
Antworten