Frage zu WM_SETFOCUS und WM_KILLFOCUS

  • Ich hab ein bischen mit WM_SETFOCUS und WM_KILLFOCUS rungespielt, und mir ist aufgefallen, dass, wenn in der GUI ein Controle ist, immer WM_KILLFOCUS aufgerufen wird.

    Nun zu meiner Frage:
    Gibt es eine Möglichkeit, diesen Fehler zu unterbinden?

    GELÖST!
    In Post 6 steht die Lösung.

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

    Einmal editiert, zuletzt von H2112 (28. März 2010 um 18:34)

    • Offizieller Beitrag

    Ein Control ist auch ein Fenster. Ich denke mal wenn das Control den Fokus bekommt, dann kann das beinhaltende Fenster dan Fokus ja nicht haben. Hast du ein Beispiel zum testen?

  • Hier, bitte:

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Test", 500, 500, -1, -1)
    GUISetOnEvent(-3, "_Close")
    GUIRegisterMsg(0x0007, "_WM_SetFocus")
    GUIRegisterMsg(0x0008, "_WM_KillFocus")
    ; GUIRegisterMsg(0x0003, "_WM_Move")
    ; GUIRegisterMsg(0x0201, "_WM_LButtonDown")
    ; GUIRegisterMsg(0x0200, "_WM_MouseMove")
    GUICtrlCreateButton("Test", 100, 100, 100, 20)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Close()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_SetFocus($hwnd, $message, $wParam, $lParam)
    ToolTip("Die GUI hat den Focus")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_KillFocus($hwnd, $message, $wParam, $lParam)
    ToolTip("Die GUI hat den Focus verloren")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_Move($hwnd, $message, $wParam, $lParam)
    ToolTip("Die Position des Fenster wurde geändert")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_LButtonDown($hwnd, $message, $wParam, $lParam)
    Local $Split = StringSplit($lParam, "")
    Local $x = Dec($split[7] & $split[8] & $split[9] & $split[10])
    Local $y = Dec($split[3] & $split[4] & $split[5] & $split[6])
    ToolTip("Die linke Maustaste wurde gedrückt" & @CRLF & "xPos: " & $x & @CRLF & "yPos: " & $y)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_MouseMove($hwnd, $message, $wParam, $lParam)
    Local $Split = StringSplit($lParam, "")
    Local $x = Dec($split[7] & $split[8] & $split[9] & $split[10])
    Local $y = Dec($split[3] & $split[4] & $split[5] & $split[6])
    ToolTip("Der Cursor ist innerhalb des Fensters" & @CRLF & "xPos: " & $x & @CRLF & "yPos: " & $y)
    EndFunc

    [/autoit]
    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • Die beiden Funktionen müssen 0 zurückgeben:

    [autoit]

    Func _WM_SetFocus($hwnd, $message, $wParam, $lParam)
    ToolTip("Die GUI hat den Focus")
    Return 0
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _WM_KillFocus($hwnd, $message, $wParam, $lParam)
    ToolTip("Die GUI hat den Focus verloren")
    Return 0
    EndFunc

    [/autoit]

    mfgE

  • Danke für die Antwort, hat aber das Problem bei mir nicht gelöst. :(

    Soblad man auf den Button klickt, verliert die GUI den Focus wieder.

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • Das ist mir auch ein Rätsel!

    Du könntest jedoch WM_ACTIVATE verwenden:

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Test", 500, 500, -1, -1)
    GUISetOnEvent(-3, "_Close")
    GUIRegisterMsg(0x0006, "_WM_ACTIVATE")
    GUICtrlCreateButton("Test", 100, 100, 100, 20)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Close()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_ACTIVATE($hWnd, $Msg, $wParam, $lParam)
    $nCode = BitAND($wParam, 0x0000FFFF)
    Switch $nCode
    Case 0
    ToolTip("Die GUI hat den Focus verloren")
    Case Else
    ToolTip("Die GUI hat den Focus")
    EndSwitch
    Return 0
    EndFunc

    [/autoit]
  • Danke das hat mein Problem erledigt.

    GELÖST!

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%