Dialogstyles: Child <-> Popup



  • Hi,

    ich hab da mal wieder n Problemchen, was wie folgt aussieht.
    Ich hab in meinen Resourcen ein Dialog-Template, mit der Style-Eigenschaft auf Child. Hier brauche ich die Eigenschaft, um ihn als Template an einen Öffnen-/Speichern-Dialog anzuhängen.
    Jetzt möchte ich aber die gleiche Resource wiederverwenden, diesmal jedoch mit der Styleeigenschaft auf Popup. Popup deshalb, weil in einer Basisklasse davon eine Funktion für die Transparenz-Darstellung zuständig ist und die nach bisherigen Versuchen mit Popups funktioniert, als Child jedoch nicht.
    Zum Umstellen des Styles verwende ich folgenden Code:

    void CToolBar::OnButtonInfo()
    {
      if(m_PicInfo) return;
    
      m_PicInfo.Create();
      m_PicInfo.SetOwner(this);
    
      long lDlgStyle = GetWindowLong(m_PicInfo.m_hWnd, GWL_STYLE);
      lDlgStyle &= ~WS_CHILD;// | WS_CLIPSIBLINGS | WS_VISIBLE;
      lDlgStyle |= WS_POPUP;
      ::SetWindowLong(m_PicInfo.m_hWnd, GWL_STYLE, lDlgStyle);*/
    
      m_PicInfo.ShowWindow(SW_SHOW);
      CMyDialog::SetWndTransparency(m_PicInfo.m_hWnd, 128);
    }
    

    Wenn ich den Style direkt in den Resourcen änder, funktioniert es auch ohne GetWindowLong(...)/ SetWindowLong(...). Mit der Umstellung über den Quellcode nicht.

    Kann mir vielleicht noch jemand n Tipp geben, was ich evtl. noch ändern müsste 😕

    MfG
    Anti


  • Mod

    Der Stil WS_CHILD kann nicht nachträglich verändert werden. Es gibt Stile, die beim Erzeugen eines Fensters festgelegt werden. WS_CHILD/WS_POPUP gehört dazu!

    Du kannst einfach einen leeren Dialog erzeugen und Deinen Dialog als Child darin platzieren.
    Siehe auch:
    http://www.codeproject.com/dialog/CRHChildDialog.asp
    http://www.codeproject.com/dialog/childdlg.asp

    Du kannst es aber auch anders machen und die Ressource laden, das Stil Bit in Template ändern und den Dialog mit dem geänderten Stilbit erzeugen.

    Die MFC stellt dazu auch die nette Klasse CDialogTemplate zur verfügung. Die ist zwar nicht dokumeniert aber sehr einfach zu nutzen.


Anmelden zum Antworten