Nichtmodales Dialogfeld verknüpfen
-
Mach pDialog mal zu einer public Membervariablen im MainFrame.
Dann kommst du mit AfxGetMainWnd an den Mainframe (musst noch casten) und kannst den nach dem Zeiger fragen.Dann sollte das gehen.
-
danke mal ich habs folgendermaßen nun gemacht:
einfügen der Variable in mainfrm
// Implementierung public: CMyDialog* pDialog;
jetzt den Code in der OnDraw aktualisiert:
gibt mir aber nen Runtime error aus bzw. mit pDialog->... komm ich nicht auf die Membervariable die die Checkbox beinhaltet...void CGfxView::OnDraw(CDC* pDC) { CGfxDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CMainFrame* pDialog = dynamic_cast<CMainFrame*>(AfxGetMainWnd()); ASSERT (pDialog); if(m_bGrid == TRUE) { CPen maxPen(PS_SOLID,5,RGB(255,0,0)); pDC->SelectObject(&maxPen); pDC->Rectangle(100,100,200,200); } }
-
Dein Hauptfenster ist der MainFrame, nicht der Dialog.
-
Ähm wie meinst du das?
nicht den Pointer pDialog verwenden fürs Casten oder wie?
-
Ups, jetzt war ich auf den Variablennamen reingefallen.
Sorry.
Du kommst mitpDialog->pDialog->fCheckbox
an die Checkbox.
Du hangelst dich einfach vom MainFrame über die Member (Dialog) an dessen Member, die Checkbox.
-
danke, leider kommt nochn Runtime error
hab 2 warnungen und zwar...
'dynamic_cast' fuer polymorphen Typ 'class CWnd' mit /GR- verwendet; unvorhersehbares Verhalten moeglich
-
harryhcen01 schrieb:
'dynamic_cast' fuer polymorphen Typ 'class CWnd' mit /GR- verwendet; unvorhersehbares Verhalten moeglich
Schalte in den Projekteinstellungen RTTI ein.
Wo kommt der Runtime Error? Hast du mal debugged?
-
wenn ich RTTI einschalte kommt zwar keine Warnung, jedoch stürzt das Programm ab....
in dieser Casting Zeile
CMainFrame* pDialog = dynamic_cast<CMainFrame*>(AfxGetMainWnd()); ASSERT (pDialog);
-
Für die MFC brauchst Du keine RTTI! Das macht die MFC selber...
Frage einfach so ab (ohne RTTI):
CObject* pObj = (CObject*) AfxGetMainWnd(); if(pMyObject->IsKindOf( RUNTIME_CLASS( CMainFrame ) ) ) { // Yuhu! }
-
oke danke habs mal so probiert...Fehler oder Warnung kommt zwar keine nur funktionierts noch nicht...liegt daran weil ich nicht weiß wie ich die Variable m_bGrid von der MyDialog über die CMainFrm in die CView OnDraw() bekomme...bzw. geht das mit dem pDialog->pDialog->m_bGrid nicht (bei mir zumindest..)
void CGfxView::OnDraw(CDC* pDC) { CGfxDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CMainFrame* pDialog = (CMainFrame*)AfxGetMainWnd(); if(pDialog->IsKindOf(RUNTIME_CLASS(CMainFrame)) == TRUE) { CPen maxPen(PS_SOLID,5,RGB(255,0,0)); pDC->SelectObject(&maxPen); pDC->Rectangle(100,100,200,200); } }