Trennlinien im Dialogfenster???

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Trennlinien im Dialogfenster???

    Hallo.
    Ich brauche in meinem MFC-Programm ein Dialogfenster das nach dem Schema
    der Lizenzvereinbarungs-Dialofenster aussieht.
    Was mir fehlt sind die Trennlinien die solche Dialogfenster in mehrere Bereiche unterteilt. In dem Resourceneditor kann ich keine finden.

    Wie kriege ich Trennlinien in mein Dialogfenster und auch noch an die richtigen stellen fals es mit dem Resourceneditor nicht geht?

    allesc
  • Mit welcher Version von Visual Studio arbeitest du?
    Sofern du im Resourceneditor nen PictureControl zur Auswahl hast setz das auf deinen Dialog und setz den Typ auf "geätzte Horizontale".
    Fertig.
    Ansonsten musst du nen Staticfeld mit dem Stil SS_ETCHEDHORZ erstellen.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • Visual C++ 6 kennt das Picture Control noch nicht(zumindest nicht das das du brauchst).
    Die Linie ist wirklich nur nen Staticfeld mit dem SS_ETCHEDHORZ Stil.
    Ich schreib nacher mal ne Spezialisierung von CStatic.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • Hi,
    mit dem direktem Subclassing und dem Anpassen des Stils in PreCreateWindows klappt leider nicht ohne größeren Aufwand,deshalb hier nen kleiner Workaround.
    Ist sicher nicht optimal aber tut seinen Dienst :wink: .
    Line.h:

    Quellcode

    1. #ifndef __HORZ_LINE_H
    2. #define __HORZ_LINE_H
    3. class CLine : public CStatic
    4. {
    5. DECLARE_DYNAMIC(CLine)
    6. public:
    7. CLine();
    8. virtual ~CLine();
    9. bool Init();
    10. protected:
    11. DECLARE_MESSAGE_MAP()
    12. HWND hLine;
    13. CRect rect;
    14. public:
    15. afx_msg void OnDestroy();
    16. };
    17. #endif
    Alles anzeigen


    Line.cpp:

    Quellcode

    1. #include "stdafx.h"
    2. #include "Line.h"
    3. IMPLEMENT_DYNAMIC(CLine, CStatic)
    4. CLine::CLine()
    5. {
    6. }
    7. CLine::~CLine()
    8. {
    9. }
    10. BEGIN_MESSAGE_MAP(CLine, CStatic)
    11. ON_WM_DESTROY()
    12. END_MESSAGE_MAP()
    13. bool CLine::Init()
    14. {
    15. CRect rect;
    16. this->GetWindowRect(&rect);
    17. hLine = CreateWindowEx(0, TEXT("static"), TEXT(""),
    18. WS_CHILD|WS_VISIBLE|SS_ETCHEDHORZ,
    19. 0,rect.Height()/2,rect.Width(),10,
    20. this->GetSafeHwnd(),0,0,0);
    21. if(hLine==NULL)
    22. return false;
    23. return true;
    24. }
    25. void CLine::OnDestroy()
    26. {
    27. CStatic::OnDestroy();
    28. ::DestroyWindow(hLine);
    29. }
    Alles anzeigen


    Um die Klasse zu benutzen einfach Header und Implementierung deinem Projekt hinzufügen.
    Dann im Resourceneditor Staticfelder anlegen wo du die Trennlinien haben möchtest.
    Den Staticfeldern andere ID´s geben damit du für diese Controlvariablen anlegen kannst.
    Dann Controllvariablen anlegen und anschliessend im Header des Dialogs den Line Header inkludieren und den Typ der Controlvariablen auf CLine ändern.
    Jetzt nur noch in OnInitDialog für die Controlvariablen die Init Methode aufrufen und fertig.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)