Ein Code für dauerhafte Dialoghintergründe jeglicher Art, also nicht nur einfarbig:
[Blockierte Grafik: http://s4.postimage.org/2n30jbtd0/Screen_17_03_2011_20_52_06.jpg]
Code
'
' (c) Frabbing für Paules-PC-Forum:
' http://www.paules-pc-forum.de/forum/xprofan/
'
$H windows.ph
$H messages.ph
Declare dc&, ps#
Dim ps#,128
Cls
Proc NeuZeichnen
Parameters thedc&
StartPaint thedc&
'
' --- Hier den Hintergrund des Dialogs neu zeichnen ---
UseBrush 1,RGB(128,128,255)
Rectangle 0,0 - %maxx,%maxy
UseBrush 1,RGB(255,200,40)
Ellipse 0,0 - 400,300
' -----------------------------------------------------
EndPaint
Endproc
SubClassProc
If %smessage = ~WM_PAINT
dc& = ~BeginPaint(&sWnd, ps#)
NeuZeichnen(dc&)
~EndPaint(&sWnd, ps#)
Set("WinProc", 0)
Endif
EndProc
var d1& = Create("Dialog",%hwnd,"Dialog",200,200,400,300)
var d2& = Create("Window",%hwnd,"Window",400,400,400,300)
' Dialoge hier schonmal neuzeichnen, weil uns das Subclassing
' mit XProfan WM_INITDIALOG nicht abfragen lässt
'
Neuzeichnen(~GetDC(d1&))
Neuzeichnen(~GetDC(d2&))
' Jetzt erst die Controls für die Dialoge
'
Create("Button",d1&,"Ein Button",140,140,120,40)
Create("Button",d2&,"Ein Button",140,140,120,40)
SubClass d1&, 1
SubClass d2&, 1
While 1
WaitInput
Case %key=2: BREAK
EndWhile
Alles anzeigen
Leider lässt sich WM_INITDIALOG im Subclassing nicht abfragen, darum muß man - zumindest unter Windows 7 - das erste Neuzeichnen manuell übernehmen.