000
16.05.2005, 12:37 Uhr
~Michael L.
Gast
|
Hi,
also ich hab mir ein altes Projekt wieder angeschaut und einen merkwüdigen Effekt. Ich möchte einen Dialog anlegen und dieser verursacht den oben erwähnten Fehler. Der Code ging aber schon mal und der Fehler liegt in einer MFC Klasse
Ich versuche mal den Fehlerweg aufzuzeigen: (Sorry für den vielen Code )
->> Meine Klassen
C++: |
... CFtpSearch* ftp = new CFtpSearch(this); ftp->DoModal(); ...
|
Dialogklasse
C++: |
// FtpSearch.cpp: Implementierungsdatei //
#include "stdafx.h" #include "RelocateToFtp.h" #include "FtpSearch.h"
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif
///////////////////////////////////////////////////////////////////////////// // Dialogfeld CFtpSearch
CFtpSearch::CFtpSearch(CRelocate* rel) : CDialog(CFtpSearch::IDD, NULL),m_relocate(rel) { //{{AFX_DATA_INIT(CFtpSearch) m_strPfad = _T(""); //}}AFX_DATA_INIT }
void CFtpSearch::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFtpSearch) DDX_Control(pDX, IDC_FILES, m_ctrlFiles); DDX_Text(pDX, IDC_PFAD, m_strPfad); //}}AFX_DATA_MAP }
BEGIN_MESSAGE_MAP(CFtpSearch, CDialog) //{{AFX_MSG_MAP(CFtpSearch) ON_BN_CLICKED(IDC_EXIT, OnExit) ON_LBN_DBLCLK(IDC_FILES, OnDblclkFiles) //}}AFX_MSG_MAP END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////// // Behandlungsroutinen für Nachrichten CFtpSearch
void CFtpSearch::OnExit() { UpdateData(); m_relocate->SetPfad(m_strPfad); OnOK(); }
BOOL CFtpSearch::OnInitDialog() { CDialog::OnInitDialog(); // root Eintrag m_strPfad=m_relocate->GetFtpConn()->root; //ftpConn->GetCurrentDirectoryAsURL(m_strPfad); CFtpFileFind filefind(m_relocate->GetFtpConn()->ftpConn); if(filefind.FindFile()) { CString length = ""; int i = 0; do { i = filefind.FindNextFile(); // File gefunden CString directory = filefind.GetFileName(); if(filefind.IsDirectory()) { if(directory!="." && directory.GetLength()>length.GetLength()) length = directory; if(directory!=".") m_ctrlFiles.AddString(directory); } } while(i!=0); filefind.Close(); CDC* dc = m_ctrlFiles.GetDC(); CSize s = dc->GetTextExtent(length); m_ctrlFiles.SetColumnWidth(s.cx); m_ctrlFiles.ReleaseDC(dc); } UpdateData(false); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben }
void CFtpSearch::OnCancel() { // Root zurück setzen (wurde durch selektieren verändert) m_relocate->GetFtpConn()->ftpConn->SetCurrentDirectory(m_relocate->GetFtpConn()->root);
CDialog::OnCancel(); }
void CFtpSearch::OnDblclkFiles() { // Was wurde ausgewählt -> neues root int index = m_ctrlFiles.GetCurSel(); if(index>=0) { // Nach unterverzeichnisen suchen CString selected =""; m_ctrlFiles.GetText(index,selected); if(selected=="..") { // Ein Verzeichnis nach oben if(m_relocate->GetFtpConn()->aktuell!="") m_relocate->GetFtpConn()->aktuell = m_relocate->GetFtpConn()->aktuell.Left(m_relocate->GetFtpConn()->aktuell.ReverseFind('/')); } else { if(m_relocate->GetFtpConn()->aktuell=="") { // sind noch in root -> nur namen anhängen m_relocate->GetFtpConn()->aktuell = selected; } else { // sind tief in Verzeichnisbaum m_relocate->GetFtpConn()->aktuell += "/"+selected; } }
// suchen if(m_relocate->GetFtpConn()->ftpConn->SetCurrentDirectory(selected)) { // Pfad anpassen m_strPfad=m_relocate->GetFtpConn()->root+m_relocate->GetFtpConn()->aktuell;
// bisherigen Einträge löschen m_ctrlFiles.ResetContent();
CString length = ""; CFtpFileFind filefind(m_relocate->GetFtpConn()->ftpConn); if(filefind.FindFile()) { int i = 0; do { i = filefind.FindNextFile(); // File gefunden CString directory = filefind.GetFileName(); if(filefind.IsDirectory()) { if(directory!="." && directory.GetLength()>length.GetLength()) length = directory; if(directory!=".") m_ctrlFiles.AddString(directory); } } while(i!=0); filefind.Close(); CDC* dc = m_ctrlFiles.GetDC(); CSize s = dc->GetTextExtent(length); m_ctrlFiles.SetColumnWidth(s.cx); m_ctrlFiles.ReleaseDC(dc); } } else DWORD dw = GetLastError(); } UpdateData(false); }
|
->> Windows Klassen
int CDialog:oModal()
C++: |
... if (CreateDlgIndirect(lpDialogTemplate,CWnd::FromHandle(hWndParent), hInst)) ...
|
BOOL CWnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd, HINSTANCE hInst)
C++: |
... hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate, pParentWnd->GetSafeHwnd(), AfxDlgProc); ...
|
Hat jemand eine Idee was hier gegen den Baum läuft? Wie gesagt ich bin mir sicher das das der Code schon einmal lief.
mfg Michael |