hwnd = CreateWindowEx - hwnd == const ?



  • Hallo !
    Bleibt das hwnd, das mir CreateWindowEx immer gleich ?
    Oder kann es vorkommen, das es sich im Programmverlauf ändert ?

    thx



  • Solange Du kein DestroyWindow() (oder auch exotischer CloseHandle() usw.) aufrufst, ändert sich Dein hwnd nicht.

    Bei einem CloseWindow() ändert sich das hwnd auch nicht, da das Fenster zwar geschlossen (also unsichtbar) wird, aber immer noch im System (Speicher) angelegt ist.

    Martin



  • dann nehme ich jetzt einfach mal an, das es mit hdc = GetDC(hwnd) auch so ist, also das hdc konstant bleibt.

    ich sehe nämlich in vielen beispielen, das für die anzeige von bitmaps die hdc's bei jedem betreten der anzeigefunktion immer wieder neu erzeugt und mit ReleaseDC und DeleteDC zerstört werden.
    meiner meinung nach ist das völlig unnötig, solange die hdc's sich nicht ändern.



  • WinApi NooB schrieb:

    meiner meinung nach ist das völlig unnötig, solange die hdc's sich nicht ändern.

    Mit dem hdc ist es etwas anderes als hwnd.

    hdc kann sich sehr wohl im Laufe des Programms ändern. Z.B. Du änderst in den Systemeinstellungen die Hintergrundfarbe des Fensters oder die Schriftarten, während Dein Programm parallel dazu läuft. Oder änderst die Szeneneinstellungen.

    Bei hdc kann ich Dir eine grobe Faustformel empfehlen (natürlich gibts auch da Ausnahmen, aber lassen wir die mal außen vor):
    Viele Windows-Nachrichten (z.B. WM_PAINT) liefern Dir das hdc in LPARAM/WPARAM oder in der Struktur mit. D.h. nutze möglichst nur diesen hdc um in das Fenster zu zeichnen.

    Wenn Du aber ein Bitmap bearbeiten willst (z.B. Manipulation mit BitBlt()), brauchst Du meistens einen separaten hdc den Dir z.B. CreateCompatibleDC() liefert.

    Martin



  • ja, das mit dem separaten hdc habe ich jetzt auch rausgefunden. aber das mit der änderung ist natürlich gut zu wissen, daran habe ich so noch gar nicht gedacht.
    ich erstelle eine bitmap, die so groß wie die auflösung des bildschirms ist.
    also z.b. 800x600
    ändert der benutzer die einstellung auf z.b. 1024x768 dann sollte das programm darauf reagieren, indem eine neue bitmap erstellt wird.

    dann muss ich also in WndProc den status vom fenster hdc checken.



  • Wenn ein User die Bildschirmauflösung ändert, bekommt Deine Messageschleife bzw. Dein WndProc() die Nachricht WM_DISPLAYCHANGE.
    D.h. bei Größenänderungen brauchst Du nur diese Nachricht zu verarbeiten, um dann Dein Bitmap neu zu berechnen.

    Weitere Nachrichten ähnlicher Art sind:
    WM_SETTINGCHANGE
    WM_WININICHANGE
    WM_SYSCOLORCHANGE
    WM_THEMECHANGED

    Nutze die MSDN wenn Du mehr darüber wissen möchtest.
    Martin



  • Mmacher schrieb:

    Wenn ein User die Bildschirmauflösung ändert, bekommt Deine Messageschleife bzw. Dein WndProc() die Nachricht WM_DISPLAYCHANGE.
    D.h. bei Größenänderungen brauchst Du nur diese Nachricht zu verarbeiten, um dann Dein Bitmap neu zu berechnen.

    Weitere Nachrichten ähnlicher Art sind:
    WM_SETTINGCHANGE
    WM_WININICHANGE
    WM_SYSCOLORCHANGE
    WM_THEMECHANGED

    Nutze die MSDN wenn Du mehr darüber wissen möchtest.
    Martin

    Superklasse !!! 👍
    Danke ! 🙂


Anmelden zum Antworten