![]() |
Erstellen von Fenstern
Hallo erstmal !
Wie der Title schon sagt will ich Fenster erstellen und zwar ohne Formulare zu verwenden. Ich hab' es schon mit Windows.CreateWindow() und Windows.CreateWindowEx() probiert aber irgendwie klappt das nicht, denn ich erhalte immer nur das Handle des Desktops. Es muss irgendwie an den Parametern liegen, die ich übergebe. Ich weiß zum Beispiel nicht was für 'ne Class ich angeben soll. Also bitte ich um ein 'richtig' funktionierendes Beispiel für den Aufruf dieser Funktion. Danke ! P.s.: Falls ich irgendetwas missverstanden habe, hier mein Ziel: ich will eine Zeichenfläche auf dem Desktop initiieren, auf der ich zeichnen kann ohne den Desktop zu beschmieren. Wenn ich das Fenster also irgendwann freigebe, soll der Desktop davon wie unberührt bleiben. |
Re: Erstellen von Fenstern
Ohne Formulare zu verwenden (also nonVCL) musst du auf die API zurückgreifen.
CreateWindow ist der richtige Ansatz, aber noch nicht genug ;) Stichworte: WNDClass/WNDClassEx und RegisterWndClass oder so ähnlich schau im fall mal in die MSDN, dort ist sicher ein Beispiel, wie man ein Fenster erstellt (Wenne keins findest: Such bei den Tutorials für DirectX, dort ist auch ein beispiel dabei ;) ) |
Re: Erstellen von Fenstern
![]() |
Re: Erstellen von Fenstern
@Luckie: Das hat geholfen. Danke!
Aber kann ich auch ein Fenster erstellen, das sich nicht immer wieder neuzeichnet, bevor ich die WM_PAINT Message empfange ? Ich will nämlich mein Fenster mit Hilfe von WM_MOUSEMOVE bewegen. Ich rufe also MoveWindow(Wnd,x,y,Width,Height,True) auf. Wegen des True wird es dann auch gezeichnet. Nur die WM_PAINT Message wird gesendet, wenn das Fenster schon leer gezeichnet wurde. Bei TForm umgeht man solches Flackern einfach mit DoubleBuffered:=True, aber wie geht das bei diesen Fenstern ? |
Re: Erstellen von Fenstern
Moment, das Fenster bewegt sich selbst? Oder wie müssen wir uns das vorstellen? Geschieht es durch das Fenster selbst oder geschieht es von außen?
|
Re: Erstellen von Fenstern
Zitat:
Hier meine Fensterprozedur:
Delphi-Quellcode:
var
DC,SaveDC:HDC; SaveBitmap:HBITMAP; Map:Cardinal; // unwichtig function WndProc(Win:HWND;uMsg:UINT;wParam:wParam;lParam:lParam):lResult;stdcall; var P:Windows.TPoint; begin Result:=0; case uMsg of WM_CREATE:begin DC:=GetDC(Win); SaveDC:=CreateCompatibleDC(DC); SaveBitmap:=CreateBitmap(GetMapWidth(Map),GetMapHeight(Map),1,24,nil); SaveBitmap:=SelectObject(SaveDC,SaveBitmap); DrawSmallMap(Map,SaveDC,0,0);// irgendeine Graifik wird auf SaveDC gezeichnet end; WM_PAINT:BitBlt(DC,(WindowWidth-GetMapWidth(Map)) div 2,(WindowHeight-GetMapHeight(Map)) div 2,GetMapWidth(Map),GetMapHeight(Map),SaveDC,0,0,SRCCOPY); WM_MOUSEMOVE:if wParam=1 then begin GetCursorPos(P); MoveWindow(Win,P.X-WindowWidth div 2,P.Y-WindowHeight div 2,WindowWidth,WindowHeight,True); end; WM_DESTROY:begin DeleteObject(SaveBitmap); DeleteDC(SaveDC); ReleaseDC(Win,DC); PostQuitMessage(0); end; else Result:=DefWindowProc(Win,uMsg,wParam,lParam); end; end; |
Re: Erstellen von Fenstern
... Ähem ... du willst also nix weiter als Dragging implementieren? Dann mußt du bei WM_NCHITTEST nut HTCAPTION zurückgeben, wenn auf einer bestimmten Stelle die Maus ist, wo dieses Dragging implementiert werden soll. Habe ich in verschiedenen Apps auf meiner Webseite implementiert.
|
Re: Erstellen von Fenstern
Mag sein ... aber zunächsteinmal soll das Bild des Fensters aufhören zu flackern.
|
Re: Erstellen von Fenstern
Zitat:
|
Re: Erstellen von Fenstern
1. Gibt den DC in WM_CREATE mit ReleaseDC wieder frei
2. Nutze in WM_PAINT die Befehle BeginPaint/EndPaint und nutze den DC, den du dort im TPaintStruct bekommst. 3. Normalerweise holt man sich dort auch mit GetClientRect die Größe des Fensters (es sei denn man kann die Größe nicht ändern) 4. Fange WM_ERASEBKGND ab und lösche nur die Hintergrundteile, die nicht von deiner Bitmap überdeckt sind (dann hört sicher das Flackern auf). Du solltest dir die Beschreibung der Fenstermeldungen noch einmal ansehen ( z.B. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz