spaltenbreite speichern



  • Hey,
    ich hab in nem mfc doc/view sdi prog mit mehreren views ne CListCtrl und möchte die spaltenbreiten speichern, wenn das doc gespeichert wird.
    wie stell ich das am besten an?

    hab irgendwie so probiert:
    in der doc-klasse:

    BOOL CBspDoc::OnSaveDocument(LPCTSTR lpszPathName)
    {
    	POSITION pos = GetFirstViewPosition();
    	CView* pView;
    	while( pos ){
    		pView = GetNextView( pos );
    
                    //hier klappts nicht
    		if( pView->GetRuntimeClass() == CListView )
    			pView->SaveColumnWidths(); //soll ne memberfunc. von CListView sein
    	}
    ...
    	return CDocument::OnSaveDocument(lpszPathName);
    }
    

    kann mir jemand helfen? thx, sven



  • Na hol dir nen pointer auf die Aktive View(falls es dein ListCtrl ist) ... geh die einzellnen headercontrols durch(for schleife) und hol dir jeweils das rect(und damit die breite 😉 ) und speicher die breite in eine datei die du am besten am anfang noch öffnest ... und am ende wieder schließen ... dann bei onnewdocument oder wo dus brauchst wieder die datei öffnen und die headercontrols wieder auf die gewünschte breite setzen ...



  • Also ich geh mal von der SDI aus... d.h. du hast eine View... habs nicht getestet sondern mal kurz zusammen geschrieben ... sry

    BOOL CBspDoc::OnSaveDocument(LPCTSTR lpszPathName)
    {
        POSITION  pos   = GetFirstViewPosition();
        CBspView* pView = reinterpret_cast<CBspView*>(GetNextView(pos));
        CHeaderCtrl* pHeaderCtrl = NULL;
        FILE*     pFile = NULL;
        CRect rcItem;
    
        if (pView == NULL)
            return FALSE;
    
        if ((pHeaderCtrl = pView->GetHeaderCtrl()) == NULL)
            return false;
    
        pFile = fopen(lpszPathName, "wb");
    
        if (pFile == NULL)
            return FALSE;
    
        for (unsigned int n = 0; n < (unsigned int)pHeaderCtrl->GetItemCount(); ++n)
        {
            pHeaderCtrl->GetItemRect(n, &rcItem);
            fwrite(rcItem.Width(), sizeof(int), 1, pFile);          
        }
    
        fclose(pFile);
    
        return CDocument::OnSaveDocument(lpszPathName);
    }
    

Anmelden zum Antworten