nicht nur wenn ein event auftritt .. man braucht dafür ne ständig rennende Routine (thread) die da was draufmalt. Events werden für dieses Fenster ignoriert werden müssen (?!?).
Zmatrix funktioniert übrigens auch so.
Ich hab hier noch das Problem in das Fenster reinzumalen .. irgendwie finde ich nicht die "Verwnadlungsformel" um das Teil korrekt anzusprechen. Wenn ich als Ausgabe getdc_(hWndMain) nehme dann malt er über die Icons .. das mag am benutzten showwindow_() liegen.
Vermutlich fehlt ne Anweisung die den aktuellen Hintergrund ersetzt durch das Fenster hWndMain ..
Code: Alles auswählen
Global hWndMain
Procedure maler()
Debug hWndMain
r.RECT
r\left=0
r\top=100
r\right=150
r\bottom=150
Repeat
SetBkColor_(GetDC_(hWndMain),RGB(16,2,2))
DrawText_(GetDC_(hWndMain),"TESTESTESTETSTETER$TZERTZRTZ",20,r,#DT_BOTTOM)
Delay(10)
ForEver
EndProcedure
Procedure WindowCallback(Window, message, wParam, lParam)
Select message
Case #WM_CLOSE
If MessageBox_(Window, "Wirklich beenden?", "EXIT", #MB_YESNO) = #IDYES
DestroyWindow_(Window)
Else
Result = 0
EndIf
Case #WM_DESTROY
PostQuitMessage_(0)
Result = 0
Default
Result = DefWindowProc_(Window, message, wParam, lParam)
EndSelect
ProcedureReturn Result
EndProcedure
#Style = #WS_VISIBLE | #WS_BORDER | #WS_SYSMENU
#StyleEx = #WS_EX_TOOLWINDOW | #WS_EX_OVERLAPPEDWINDOW
#SM_XVIRTUALSCREEN = 76
#SM_YVIRTUALSCREEN=77
#SM_CXVIRTUALSCREEN = 78
#SM_CYVIRTUALSCREEN = 79
#COINIT_APARTMENTTHREADED =2
WindowClass.s = "MeinFenster"
gscreenWidth = GetSystemMetrics_(#SM_CXVIRTUALSCREEN)
If gscreenWidth = 0
gscreenWidth = GetSystemMetrics_(#SM_CXSCREEN)
EndIf
gscreenHeight = GetSystemMetrics_(#SM_CYVIRTUALSCREEN)
If gscreenHeight = 0
gscreenHeight = GetSystemMetrics_(#SM_CYSCREEN)
EndIf
gscreenTop = GetSystemMetrics_(#SM_YVIRTUALSCREEN)
gscreenLeft = GetSystemMetrics_(#SM_XVIRTUALSCREEN)
;gscreenWidth = GetSystemMetrics_(#SM_CXSCREEN)
;gscreenHeight = GetSystemMetrics_(#SM_CYSCREEN);
ValidRGN = CreateRectRgn_(0,0,gscreenWidth,gscreenHeight);
ghProgman = FindWindow_("Progman", "Program Manager")
If ghProgman<>0
Debug "parent as Progman-Class:"+Str(ghProgman)
ghShellDLL = FindWindowEx_(ghProgman, 0, "SHELLDLL_DefView", 0)
Debug "ghShellDll :"+Str(ghShellDLL)
ghSysListView = FindWindowEx_(ghShellDLL,0,"SysListView32",0)
Else
ghProgman=FindWindow_("DesktopBackgroundClass",0)
If ghProgman <>0
ghShellDLL=FindWindowEx_(ghProgman, 0, "DeskFolder", 0)
ghSysListView = FindWindowEx_(ghShellDLL,0,"SysListView32",0)
LiteStepMode = true;
Else
ghShellDLL=0
ghSysListView=0
EndIf
EndIf
wc.WNDCLASSEX
wc\cbSize = SizeOf(WNDCLASSEX)
wc\lpfnWndProc = @WindowCallback()
wc\hCursor = LoadCursor_(0, #IDC_CROSS); #IDC_ARROW = Arrow
; #IDC_SIZEALL = Size Arrow
; #IDC_CROSS = Cross
wc\hbrBackground = #COLOR_WINDOW + 1;CreateSolidBrush_(RGB($8F,$8F,$8F))
wc\lpszClassName = @WindowClass
RegisterClassEx_(@wc)
;CoInitializeEx_(0,#COINIT_APARTMENTTHREADED)
;StoreOrigDesktop_()
Debug "ghSyyListView :"+Str(ghSysListView)
If LiteStepMode=#True
Debug "litestep=#TRUE"
If ghProgman<>0
Debug "ghProgman<>0"
hWndMain = CreateWindowEx_(#WS_EX_TRANSPARENT,WindowClass,"Matrix Code", #WS_CHILDWINDOW | #WS_OVERLAPPED |#WS_CLIPSIBLINGS|#WS_CLIPCHILDREN,0,0,gscreenWidth,gscreenHeight,ghProgman,0,0,0);
EnableWindow_(hWndMain,#False)
SetWindowPos_(hWndMain,#HWND_BOTTOM,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)
Else
Debug "ghProgman=0"
hWndMain = CreateWindowEx_(#WS_EX_TRANSPARENT,WindowClass,"Matrix Code", #WS_CHILDWINDOW |#WS_CLIPCHILDREN,gscreenLeft,gscreenTop,gscreenWidth,gscreenHeight,GetDesktopWindow_(),NULL,hInstance,NULL);
EndIf
Else
Debug "litestep #FALSE"
If ghShellDLL <>0
Debug "ghShellDll<>0"
hWndMain = CreateWindowEx_(#WS_EX_TRANSPARENT,WindowClass,"Matrix Code",#WS_CHILDWINDOW |#WS_OVERLAPPED |#WS_CLIPCHILDREN,0,0,gscreenWidth,gscreenHeight,ghShellDLL,0,0,0)
EnableWindow_(hWndMain,#False)
SetWindowPos_(hWndMain,#HWND_BOTTOM,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)
Else
Debug "ghShellDll=0"
hWndMain = CreateWindowEx_(#WS_EX_TRANSPARENT,WindowClass,"Matrix Code", #WS_CHILDWINDOW |#WS_CLIPCHILDREN,gscreenLeft,gscreenTop,gscreenWidth,gscreenHeight,GetDesktopWindow_(),0,0,0)
EndIf
EndIf
;hWndMain = CreateWindowEx_(#StyleEx, WindowClass, "Test-Window", #Style, 10, 10, 200, 200, 0, 0, 0, 0)
Debug "Handle von Matrix-Code-Fenster:"+Str(hWndMain)
CreateWindowEx_(0, "Static", "", #WS_CHILD |#WS_EX_TRANSPARENT| #WS_VISIBLE | $12, 1, 1, 102, 22, hWndMain, 0, 0, 0)
For i= 1 To 5
; CreateWindowEx_(0, "Button", "Button "+Str(i), #WS_CHILD |#WS_EX_TRANSPARENT|#WS_VISIBLE, 10, 20*i, 100, 20, hWndMain, 0, 0, 0)
Next i
CreateThread(@maler(),0)
ShowWindow_(hWndMain, #SW_SHOWDEFAULT)
;ShowWindow_(hWndMain, SW_RESTORE )
UpdateWindow_(hWndMain);
;For i= 0 To 255
; Debug GetDeviceCaps_(GetDC_(0),i)
;Next i
Debug "setcliprgn"
Debug SelectClipRgn_(hWndMain,ValidRGN)
;DrawText_(GetDC_(hWndMain),"TESTESTESTETSTETER$TZERTZRTZ",20,r,#DT_BOTTOM)
MessageRequester("","-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------",0)
End
While GetMessage_(msg.MSG, #Null, 0, 0 )
TranslateMessage_(msg)
DispatchMessage_(msg)
Wend