Wie Größe von CPropertyPage ändern?



  • Hallo zusammen,

    ich habe eine CPropertySheet mit drei Registern. Das CPropertySheet soll direkt beim Start des Programms erzeugt werden und die Größe des Hauptrahmens besitzen.

    Die Definition des CPropertySheet ist wie folgt:

    class CReg1 : public CPropertySheet
    {
    	DECLARE_DYNAMIC(CReg1)
    public:
        CReg1Seite1 m_Seite1;
        CReg1Seite2 m_Seite2;
        CReg1Seite3 m_Seite3; 
    
    public:
    	CReg1(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
    	CReg1(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
    	virtual ~CReg1();
        void ChangeSizeAndPos(CWnd* pParentWnd);
    
    protected:
    	DECLARE_MESSAGE_MAP()
    };
    

    Die Funktion ChangeSizeAndPos() sieht folgendermaßen aus für das CPropertySheet:

    void CReg1::ChangeSizeAndPos(CWnd* pParentWnd = NULL)
    {
        CRect Reg1Rect;
        CRect ParentRect;
        GetClientRect(Reg1Rect);
        pParentWnd->GetClientRect(ParentRect);
        MoveWindow(Reg1Rect.left+5 , Reg1Rect.top+49, ParentRect.Width(),
                   ParentRect.Height()-20, TRUE);
        m_Seite1.ChangeSizeAndPos(pParentWnd);
        //m_Seite2.ChangeSizeAndPos();
        //m_Seite3.ChangeSizeAndPos(pParentWnd);  
    }
    

    Für die CPropertyPages sieht die Funktion ChangeSizeandPos folgendermaßen aus (exemplarisch für CReg1Seite1):
    void CReg1Seite1::ChangeSizeAndPos(CWnd* pParentWnd)

    {
        CRect Reg1Rect;
        CRect ParentRect;
        GetClientRect(Reg1Rect);
        pParentWnd->GetClientRect(ParentRect);
        MoveWindow(Reg1Rect.left+5 , Reg1Rect.top+49, ParentRect.Width()+5,
                   ParentRect.Height(), TRUE);
    
    }
    

    CReg1::ChangeSizeAndPos() wird in der IniInstance aufgerufen, da wie gesagt das Registerblatt direkt am Anfang erzeugt werden soll.

    Nun zu meinem Problem: Rufe ich den Code auf, so wie er gier dargestellt ist, so erzeugt er mir das erste Registerblatt in der richtigen Größe. Sobald ich aber auf das zweite Blatt wechsel und zurückkehre, ist das erste Blatt kleiner geworden.

    Falls ich nun die Zeilen

    //m_Seite2.ChangeSizeAndPos(pParentWnd);
        //m_Seite3.ChangeSizeAndPos(pParentWnd);
    

    einkommentiere, stürzt mir das Programm ab. und zwar an der Stelle GetClientRect(&Reg1Rect) in CReg1Seite2::ChangeSizeAndPos(CWnd* pParentWnd)für das zweite Fenster also. Es kompliert, aber beim Programmstart läuft was falsch. Fehler in der Datei afxwin2.inl. Was mache ich falsch?
    Mein Ziel ist es halt, direkt beim Programmstart ein CPropertySheet mit drei Registern zu erzeugen, was direkt die Größe des Hauptrahmens hat.
    Bin dankbar für eure Hilfe.



  • Überschreib doch einfach die OnSize von CReg1 und Move die aktuelle Seite auf die entsprechende Größe, sollte doch fuzzen. Wobei du dich ausgeschwiegen hast wo du CReg1::ChangeSizeAndPos aufrufst.

    Gruß Matthias


Anmelden zum Antworten