Ich möchte Informationen auf die Titelleiste eines Fensters malen, die auch nach einem Repaint der sogenannten Non-Client-Area (NC) erhalten bleiben.
Ich reagiere dazu auf die Window-Message $WM_NCPAINT
Problem: entweder ich muss den ganzen Rahmen selbst zeichen (keine Lösung) oder mein gezeichnetes (Beispiel schwarzer Rahmen)
wird von der Standard-Funktion nach dem Zeichnen wieder übermalt (je nach Return-Wert meiner Funktion)
Wie kann ich erreichen, das Windows erst den Standard-Rahmen zeichnet auf den ich dann etwas drauf zeichne?
C
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <GDIPlus.au3>
$hGUI = GUICreate( "TEST" , 320, 240, -1, -1, $WS_SIZEBOX )
GUIRegisterMsg( $WM_NCPAINT , "WM_NCPAINT" )
GUISetState()
Do
Until GUIGetMsg() = -3
Func WM_NCPAINT( $hWnd, $Msg, $wParam, $lParam )
$hDC = _WinAPI_GetWindowDC( $hWnd )
$hPen = DllCall( "gdi32.dll" , "hwnd", "CreatePen", "int", $PS_SOLID, "int", 5, "int", 0x00FFFF)
$aHwndPos = WinGetPos( $hWnd )
DllCall( "gdi32.dll", "int", "Rectangle", "hwnd", $hDC, "int", 1, "int", 1, "int", $aHwndPos[2], "int", $aHwndPos[3])
;~ Return $GUI_RUNDEFMSG ; Windows-Standard-Funktion wird noch nachgelagert (übermalt alles wieder)
Return True ; Windows-Standard-Funktion nicht mehr nötig, Erfolgsmeldung
EndFunc
Alles anzeigen
Scheinlösungen wie Overlay-Windows die dem Fenster folgen usw würde ich gern vermeiden.
Gruß
Blues