Dialog per CreateWindowEx erzeugen... kleines Problem...



  • Das Dialog öffnet sich sogar mit CreateWindowEx, die Prozedur wird auch zugewiesen, aber es erscheinen keine Elemente (Buttons etc. von IDD_MP3PLAYER)
    ... Wahrscheinlich geht die IDD_MP3PLAYER DLG-PROC Zuweisung nicht!

    Was Du da machst, ist mir völlig rätselhaft. Warum setzt Du die ID nicht gleich im CreateWindow-Aufruf? Und warum verwendest Du nicht CreateDialog?

    Ich habe nach einer Möglichkeit gesucht, den Style des Fensters zu ändern. Per SetWindowLongPtr konnte ich kein Ergebnis erziehen,

    Nach dem Aufruf von SetWindowLongPtr muß noch SetWindowPos aufgerufen werden. Zitat MSDN: "If you have changed certain window data using SetWindowLong, you must call SetWindowPos to have the changes take effect. Use the following combination for uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED"

    da ich dort das "ParentWnd" des Player-Dialoges nicht einstellen kann!

    Das ist auch kein Style. Dafür gibt es aber die Funktion SetParent().

    Ich würde, davon mal abgesehen, so vorgehen: Erstelle ein Fenster ohne Parent mit dem ExStyle WS_EX_TOOLWINDOW und ohne Titelleiste. Dieses Fenster kannst Du jetzt in Deine Anwendung 'einpflanzen'. Wes es ausgedockt wird, fügst Du (per SetWindowLongPtr) die Titelleiste hinzu, löscht das ExStyle WS_EX_TOOLWINDOW und setzt anstelle dessen WS_EX_APPWINDOW.

    [ Dieser Beitrag wurde am 03.11.2002 um 16:47 Uhr von -King- editiert. ]



  • Ich habe das ja so probiert, wie es mir auch lieber wäre:

    hMP3Player = CreateDialog(hInst, (LPSTR)IDD_MP3PLAYER, NULL, (DLGPROC)MP3Player);
    

    Aber wenn ich hParentWindow auf "NULL" setze (wie in diesem Beispiel) dann erscheint das Dialog nicht! Es erscheint mit CreateDialog nur, wenn ich das WndHandle von meinem MainWnd übergebe, oder eines der Childwindows...



  • Der Dialog darf dann natürlich auch nicht das Style WS_CHILD gesetzt haben, nicht 'untergeordnet'.



  • , löscht das ExStyle WS_EX_TOOLWINDOW und

    Wie kann man denn ein Style "löschen"?



  • Wie kann man denn ein Style "löschen"?

    LONG_PTR lExStyle;
    
      lExStyle = GetWindowLongPtr(hWnd, GWL_EXSTYLE);
      lExStyle &= ~WS_EX_TOOLWINDOW;
      SetWindowLongPtr(hWnd, GWL_EXSTYLE, lExStyle);
    


  • Huch, sowas habe ich ja noch nie gesehen. Ich werde dann einmal ausprobieren...

    Bis gleich



  • DANKE. Es funktioniert!



  • Ein Problem gibts da noch.
    Es klappt zwar alles super, nur wenn ich ihn einklinke und wieder ausklinke, dann bleibt da so ein Fleck, wo der Player eingeklinkt war. Ich hab schon die Fenster mit UpdateWindow geupdatet, aber es bleibt dort. Wie könnte ich alles neu zeichnen lassen, um den Fleck wegzubekommen?



  • Hmmm, ist das Thema jetzt untergegangen?



  • InvalidateRect()



  • THX! Es Funzt jetzt alles! Genial!!!


Anmelden zum Antworten