Toon posts:

[MFC/C++] documenten worden niet geopend?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik heb een programma waarmee je uit een database *.vtk bestanden moet kunnen selecteren en openen, of gewoon met 'open file' 1 uitzoeken en dan openen. Als een *.vtk open met de optie 'file open' is er niks aan de hand, maar zodra ik een database open en uit een tabel 1 selecteer opent hij hem niet.

code van selecteren uit tabel (in TableDialog.cpp):

C++:
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
void CTableDialog::OnOpen() 
{
   int ret = IDYES;
   if (m_list1.GetSelectedCount() > 20)
   {
      ret = AfxMessageBox("Are you sure you wish to open that many VTK- 
     files?",MB_YESNO|MB_ICONEXCLAMATION);
   }

   if (ret == IDYES)
   {
      CString str1;
      POSITION pos, eerste;
      eerste = m_list1.GetFirstSelectedItemPosition();
      pos = m_list1.GetFirstSelectedItemPosition();
      //AfxMessageBox(str1,NULL,MB_OK);
      tempCol.mask = LVCF_TEXT;
      tempCol.pszText="";
      tempCol.cchTextMax=32;
      m_list1.GetColumn(1,&tempCol);
      CString str;
      str.Format(TEXT("%s"),tempCol.pszText);
      //AfxMessageBox(str,NULL,MB_OK); 

      if (str == "nupaskey")
      {
            /* bepaal vtk-bestand */
            CString fileName="";
            CString str2 = tblc.rowList[(int)(pos)-1][1];
            fileName.Format(TEXT("log%s.vtk"),str2);

            //MessageBox((LPCTSTR)fileName,(CString)("File to Open"),MB_OK);

            /* open vtk-bestand */

            char *tmpstr = new char[fileName.GetLength()+1];
            strcpy(tmpstr,fileName);
            strcpy(doc_array[b],tmpstr);
            a = b;
            b++;
      }

      /* pak volgende documenten (vanaf de 2e) */
      m_list1.GetNextSelectedItem(pos); 
      while (pos != NULL)
      {
            tempCol.mask = LVCF_TEXT;
            tempCol.pszText="";
            tempCol.cchTextMax=32;
            m_list1.GetColumn(1,&tempCol);
            str.Format(TEXT("%s"),tempCol.pszText);
            //AfxMessageBox(str,NULL,MB_OK);
            if (str == "nupaskey") 
            {
                  /* bepaal vtk-bestand */
                  CString fileName="";
                  CString str2 = tblc.rowList[(int)(pos)-1][1];
                  fileName.Format(TEXT("log%s.vtk"),str2);
                  //MessageBox((LPCTSTR)fileName,(CString)("File to Open"),MB_OK);

                  /* open vtk-bestand */ 
                  char *tmpstr = new char[fileName.GetLength()+1];
                  strcpy(tmpstr,fileName);
                  strcpy(doc_array[b],tmpstr);
                  a = b;
                  b++;
            }
            m_list1.GetNextSelectedItem(pos); //3e en volgende
      }

      CSampleDoc().ToonVTK(doc_array);

      }// end if (ret == IDYES)
}


code van open file + ToonVTK(in SampleDoc.cpp):

C++:
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
BOOL CSampleDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
   if (!vtkMFCDocument::OnOpenDocument(lpszPathName))
   {
      return FALSE;
   }

   tmp = const_cast < char* > ( lpszPathName ); 
   strcpy(doc_array[a],tmp); 
   ToonVTK(doc_array);
   a++; 
   return TRUE;
}

BOOL CSampleDoc::ToonVTK(char doc_array[10][96])
{

   for(int i = 0; i <= a; i++) 
   { 
      this->reader[i] = vtkPolyDataReader::New();
      this->reader[i]->SetFileName(doc_array[i]);

      this->filter[i] = vtkTriangleFilter::New();
      this->filter[i]->SetInput(this->reader[i]->GetOutput());

      this->mapper[i] = vtkPolyDataMapper::New();
      this->mapper[i]->SetInput(this->filter[i]->GetOutput());

      this->actor[i] = vtkActor::New();
      this->actor[i]->SetMapper(this->mapper[i]);
      this->actor[i]->VisibilityOn();

      this->Props->AddItem(this->actor[i]);
      }


   for(int j = 0; j <= a; j++) 
   { 
      this->reader[j]->Delete();
      this->filter[j]->Delete();
      this->mapper[j]->Delete();
      this->actor[j]->Delete();
   }

   return TRUE;
}


Ik begrijp niet waarom het met 'open file' wel lukt, maar met selecteren niet. Als ik de 'for lus' van ToonVTK in OnOpenDocument zet en in TableDialog daar naar verwijs, lukt het selecteren en dan openen wel.

Iemand een idee waar ik de fout in ga?

BVD

Verwijderd

Topicstarter
Curry648; hopelijk is het zo beter?

Mijn excuses!

No hard feelings? :)

modbreak: afgezien van dat het 684 is al stukken beter :) laat 't de volgende keer nu eens meteen zo zijn, je bent al genoeg gewaarschuwd... :z Ik vroeg overigens ook om het framework of OS in de titel, fix0red @ me

[ Voor 68% gewijzigd door curry684 op 07-08-2003 12:27 ]


  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op 07 augustus 2003 @ 10:51:

[..]
C++:
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
BOOL CSampleDoc::ToonVTK(char doc_array[10][96])
{

   for(int i = 0; i <= a; i++) 
   { 
      this->reader[i] = vtkPolyDataReader::New();
      this->reader[i]->SetFileName(doc_array[i]);

      this->filter[i] = vtkTriangleFilter::New();
      this->filter[i]->SetInput(this->reader[i]->GetOutput());

      this->mapper[i] = vtkPolyDataMapper::New();
      this->mapper[i]->SetInput(this->filter[i]->GetOutput());

      this->actor[i] = vtkActor::New();
      this->actor[i]->SetMapper(this->mapper[i]);
      this->actor[i]->VisibilityOn();

      this->Props->AddItem(this->actor[i]);
      }


   for(int j = 0; j <= a; j++) 
   { 
      this->reader[j]->Delete();
      this->filter[j]->Delete();
      this->mapper[j]->Delete();
      this->actor[j]->Delete();
   }

   return TRUE;
}

[..]
Je maakt de objecten aan maar als je daar klaar mee bent verwijder je het weer met die delete. dit kun je oplossen door de delete onderaan weg te halen. je maakt de objecten telkens als je de functie aanroept opnieuw aan dus de volgende keer als je de functie aanroept krijgt elke pointer bij de new een nieuw geheugenadres

Verwijderd

Topicstarter
Hmm, nee haalt niks uit. Blijft precies hetzelfde.

Verwijderd

Topicstarter
zelfs als ik ervoor zorg dat het volledige padnaam in de array komt, werkt het niet :(

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif!!!

Professionele website nodig?


Verwijderd

Topicstarter
Lol, still learning...

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21-08 18:33
Ik zou zeggen, zet eens wat breaks en kijk waar het fout gaat. Je kunt de werkende situatie al vergelijken met de situatie die fout gaat dus dat moet dan eigenlijk een walk in the park zijn.

Overigens, er zitten een aantal mem leaks in je applicatie.

[edit]
En ik zou wat doen aan de naamgeving van je variabelen / parameters. Zo te zien heb je globals en parameters dezelfde naam gegeven.

Dubbel check die code die bij de selectie uit de listview/listcontrol/lisbox hoort nog eens.

[ Voor 33% gewijzigd door farlane op 07-08-2003 15:00 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
Zou heel goed kunnen, maar dat is voor mij van latere zorg. Ze leiden toch niet tot mijn probleem. (of wel?)

zal het eens proberen met de breaks, maar schroom vooral niet om met andere ideeen te komen :D
Pagina: 1