CreateWindow und CreateWindowEx



  • Hallo Community,
    ich habe da ein Problem und eine Frage.
    Ich erstelle eine CreateWindowEx und will dieses anzeigen lassen. Dafür muss ich doch ShowWindow(hwnd,SW_SHOW) aufrufen. Kann ich nicht gleich beim erstellen WS_Visible setzen oder gibt es eine andere Möglichkeit das Fenster anzeigen zu lassen? Igendwann in der Main, wird ein zweites Fenster erstellt und aufgerufen ( SHOW(); ). Jetzt das Porblem. Wenn die Main-Show aufgerufen wird, dann wird die Anzeige auf dem CreateWindowEx gelöscht, bzw. verschwindet.

    WNDCLASSEX splw;

    splw.cbSize = sizeof(WNDCLASSEX);
    splw.style = CS_HREDRAW | CS_VREDRAW;
    splw.lpfnWndProc = DefWindowProc;
    splw.cbClsExtra = 0;
    splw.cbWndExtra = 0;
    splw.hInstance = hInstance;
    splw.hIcon = NULL;
    splw.hCursor = NULL;
    splw.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    splw.lpszMenuName = "";
    splw.lpszClassName = "Fenster";
    splw.hIconSm = NULL;

    RegisterClassEx(&splw);

    //Fenster erstellen
    HWND hwnd= CreateWindowEx(WS_EX_LAYERED,"Fenster","Fenster", WS_POPUP , //Hier WS_VISIBLE?
    nuXPos, nuYPos, widthEx, heightEx, NULL, NULL, Instance, NULL);


  • Mod

    Und ja, DU kannst in CReateWindow auch WS_VISIBLE angeben.
    Wie zeichnest Du? Ich hoffe in WM_PAINT...



  • ShowWindow() erzwingt ein Neuzeichnen des Fensters und dafür mußt Du auf WM_PAINT antworten...aber ich verstehe auch nicht, was da verschwindet...wie hast Du etwas in dem Fenster ohne einen HDC gezeichnet 😕



  • Hier wird mit WS_EX_LAYERED ein so genanntes "layered window" erzuegt, was etwas ganz Spezielles ist! Man kann es z.B. verwenden, um ein teilweise transparentes Fenster zu erzeugen. Auch die Form kann beliebig sein. Das System übernimmt das Zeichnen des gepufferten Inhalts, wenn es bewegt wird. Die Performance ist dadurch enorm gesteigerter, als wenn man in WM-PAINT den transparenten Fensterinhalt mit dem Hintergrund verrechnen und zeichnen müsste.

    Ein layered window wird nach CreateWindowEx auch niemals sichtbar! Es muss erst SetLayeredWindowAttributes oder UpdateLayeredWindow aufgerufen werden. Dadurch wird einer von zwei verschiedene Betriebsmodi gewählt. WM_PAINT spielt hier normalerweise garkeine Rolle mehr!
    Ein layered window unterscheidet sich also grundlegend vom herkömmlichen Popup window.

    Ist diese Anwendung hier wirklich beabsichtigt? Ansonsten weg mit WS_EX_LAYERED!

    Gruß
    Burkhard


Anmelden zum Antworten