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 mit

    pDialog->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);
    	}
    }
    

Anmelden zum Antworten