Ich habe folgendes Problem:
Ich möchte aus einem nicht modalen Dialog Werte an die Ansichtsklasse schicken. Nach langem suchen und probieren bin ich noch immer nicht auf einen grünen Zweig gekommen. Ich habe schon versucht Nachrichten mit SendMessage() an die Ansichtsklasse zu schicken was aber nicht funktioniert hat. Jetzt habe ich ich es wie unten beschrieben probiert, aber das funktioniert auch nicht.
Ich habe meiner Ansichtsklasse CtestView einen Zeiger des Typs CNoModal (nicht modales Fenster) spendiert und dann in OnInitialUpdate mit new initialisiert:
Mit OnDlg() wird das drücken eines Buttons abgearbeitet. Darin erzeuge ich den Dialog mit Creat. Was auch alles super klappt.
Jetzt zu meinem nicht modalen Dialog. Hier habe ich einen Variable der Ansichtsklasse definiert um dann einen Zeiger auf diese zu haben.
OnNehme() wird wieder durch einen Buttonklick aufgerufen.
Jetzt sagt mir der Compiler an der Stelle Hier:
error C2027:Verwendung des undefinierten Typs "CtestView"
Siehe Deklaration von 'CtestView'
Ich komme einfach nicht weiter. Ist diese Methode der Kommunikation zwischen Ansicht und nicht modalen Dialog richtig? Wie kann ich den Programmierfehler beheben? Gibt es eine bessere Möglichkeit diese Kommunikation zu lösen?
Für Verbesserungen und Vorschläge bin offen.
Ich hoffe es kann mir jemand bei diesem Problem helfen.
Mfg mogul
[EDIT] Habe die falsche Klassenbezeichnung abgeändert
Ich möchte aus einem nicht modalen Dialog Werte an die Ansichtsklasse schicken. Nach langem suchen und probieren bin ich noch immer nicht auf einen grünen Zweig gekommen. Ich habe schon versucht Nachrichten mit SendMessage() an die Ansichtsklasse zu schicken was aber nicht funktioniert hat. Jetzt habe ich ich es wie unten beschrieben probiert, aber das funktioniert auch nicht.
Ich habe meiner Ansichtsklasse CtestView einen Zeiger des Typs CNoModal (nicht modales Fenster) spendiert und dann in OnInitialUpdate mit new initialisiert:
Code:
CtestView.h:
class CNoModal;
class CtestView : public CFormView
{
CNoModal *dlg;
protected:
....
}
.cpp
...
void CtestView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
dlg = new CNoModal;
}
...
void CtestView::OnDlg()
{
UpdateData(TRUE);
dlg->m_zahl=this->m_zahl; //Aktuellen Wert dem Dialog mitteilen
dlg->Create(IDD_NOMODAL,NULL);
}
Mit OnDlg() wird das drücken eines Buttons abgearbeitet. Darin erzeuge ich den Dialog mit Creat. Was auch alles super klappt.
Jetzt zu meinem nicht modalen Dialog. Hier habe ich einen Variable der Ansichtsklasse definiert um dann einen Zeiger auf diese zu haben.
Code:
// NoModal.h : Header-Datei
//
/////////////////////////////////////////////////////////////////////////////
// Dialogfeld CNoModal
class CtestView;
class CNoModal : public CDialog
{
// Konstruktion
public:
CNoModal(CWnd* pParent = NULL); // Standardkonstruktor
CtestView *m_pView;
OnInitDialog();
// Dialogfelddaten
//{{AFX_DATA(CNoModal)
enum { IDD = IDD_NOMODAL };
int m_zahl;
//}}AFX_DATA
// Überschreibungen
// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CNoModal)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
//}}AFX_VIRTUAL
// Implementierung
protected:
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CNoModal)
afx_msg void OnApply();
afx_msg void OnNehme();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
***************************************************************************************
// NoModal.cpp: Implementierungsdatei
//
#include "stdafx.h"
#include "Dialogetest.h"
#include "NoModal.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Dialogfeld CNoModal
CNoModal::CNoModal(CWnd* pParent /*=NULL*/)
: CDialog(CNoModal::IDD, pParent)
{
//{{AFX_DATA_INIT(CNoModal)
m_zahl = 0;
//}}AFX_DATA_INIT
m_pView = NULL;
}
CNoModal::OnInitDialog()
{
CMainFrame* pMainFrame=(CMainFrame*)GetParentFrame();
m_pView= (CtestView*)pMainFrame->GetActiveView();
UpdateData(FALSE);
}
void CNoModal::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNoModal)
DDX_Text(pDX, IDC_ZAHL, m_zahl);
DDV_MinMaxInt(pDX, m_zahl, 0, 10);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNoModal, CDialog)
//{{AFX_MSG_MAP(CNoModal)
ON_BN_CLICKED(IDC_NEHME, OnNehme)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten CNoModal
void CNoModal::OnNehme()
{
UpdateData(TRUE);
m_pView->m_zahl=m_zahl; Hier
}
OnNehme() wird wieder durch einen Buttonklick aufgerufen.
Jetzt sagt mir der Compiler an der Stelle Hier:
error C2027:Verwendung des undefinierten Typs "CtestView"
Siehe Deklaration von 'CtestView'
Ich komme einfach nicht weiter. Ist diese Methode der Kommunikation zwischen Ansicht und nicht modalen Dialog richtig? Wie kann ich den Programmierfehler beheben? Gibt es eine bessere Möglichkeit diese Kommunikation zu lösen?
Für Verbesserungen und Vorschläge bin offen.
Ich hoffe es kann mir jemand bei diesem Problem helfen.
Mfg mogul
[EDIT] Habe die falsche Klassenbezeichnung abgeändert
Zuletzt bearbeitet: