Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Funktion in Hauptdialog rufen = Fehler

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.07.2007, 23:16 Uhr
~Lutaz
Gast


Mich plagt jetzt schon ein paar Stunden die Klasse eines nicht modalen
Dialoges.

Dort wird eine Funktion des Hauptdialoges gerufen, welche bei


C++:
GetDlgItem(IDC_BUTTON8)->EnableWindow(true);  




fehlschlägt.

Es ist immer dann der Fall, wenn aus dem nicht modalen Dialog gerufen wird.
Das Programm schmiert ab und im Debugger lande ich in der winocc.cpp an
dieser Stelle:


C++:
BOOL CWnd::EnableWindow(BOOL bEnable)
{
    ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));

//Fehler dann in nächster Zeile!
      if (m_pCtrlSite == NULL)
        return ::EnableWindow(m_hWnd, bEnable);
    else
        return m_pCtrlSite->EnableWindow(bEnable);
}  



Der Aufruf erfolgt so aus dem nicht modalen Dialog:


C++:
CString h ="123";
CTestDlg zug;
zug.dropperpfad(h);  




In der Hauptanwendung ist die Funktion so angelegt:



C++:
void CTestDlg::dropperpfad(CString d_listpfad)
{
GetDlgItem(IDC_BUTTON8)->EnableWindow(true);
}  




IDC_BUTTON8 existiert und ist inaktiv gesetzt.

Der Aufruf aus der Hauptanwendung bringt keine Probleme.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.07.2007, 08:38 Uhr
Tommix



Hallo,
das kann nicht gehen. Mit

Zitat:

C++:
CString h ="123";
CTestDlg zug;
zug.dropperpfad(h);  



legst Du einen neuen CTestDlg an, der aber weder über Create noch DoModal initialisiert wurde und dessen Controls demzufolge mit keinem Window verbunden sind, das Du enablen könntest. Es gibt mehrere Ansätze, das zu umgehen. Einer wäre dem untergeordneten Dialog einen Zeiger auf den Hauptdialog zu übergeben:

C++:
/// UnterDlg.h (wie immer der heißen mag)
/// ...

class CTestDlg;

class CUnterDlg: public CDialog
{
private:
    CTestDlg* m_pTestDlg;

public:
    void SetMainDlg(CTestDlg* pTestDlg) {m_pTestDlg = pTestDlg;}
/// ...


und dann so zuzugreifen:

C++:
CString h ="123";
m_pTestDlg->dropperpfad(h);



Zuvor mußt du im Hauptdialog natürlich

C++:
UnterDlg.SetMainDlg(this);


aufrufen.

Gruß, Tommix

Dieser Post wurde am 05.07.2007 um 08:40 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: