MFC Doc View und Dialoge zur Steuerung

Moin Gemeinde,

Ich denke es liegt an mir, oder aber an meinem Programmierstil.

Folgendes Tat ich

MFC Visual C++

Angelegt hab ich eine MDI

Dann noch ein CTRLdlg Dialog;
mit 3 Radiobuttons

Den Dialog erzeuge ich im CView

CCSpectralView::CCSpectralView()
.
.
.
m\_nModus = 1;
m\_pCViewDocCtrl = new CTRLdlg();
// Dialog erstellen und anzeigen
m\_pCViewDocCtrl-\>Create(CTRLdlg::IDD);
m\_pCViewDocCtrl-\>ShowWindow(SW\_NORMAL);
.
.
  1. Frage , darf ich das so machen :smile:

Dann Hab ich im View OnDraw

CCSpectralView::open\_mouth:nDraw(CDC\* pDC)
..
if (m\_nModus \> 1 ) 
{
zeichnestuss(pDC,m\_nModus);
}
..

Nun dacht ich mir ich mach mir es einfach und
geh in Ressource Dialog auf den Radiobutton
und leg ein EreignisshÀndler an OnButtonClick

in die Funktion OnButtonClick schreib ich dann

void CTRLdlg::open\_mouth:nBnClickedRadio8()
{
 m\_nModus = 2;
}

so bis dahin gehts eigentlich, m_nModus nimmt laut Debug auch den wert 2 an.

  1. Frage , wie greife ich nun auf CCSpectralView zu
    so das es CTRLdlg::m_nModus and die CCSpectralView::m_nModus
    zuweist.

  2. Frage , wie greife ich dann noch auf mein Document zu.
    mit

    CCSpectralView* pView = (CCSpectralView*) AfxGetApp()->m_pMainWnd->GetActiveWindow();

lÀuft garnichts ;-(

Moin Gemeinde,

Ich denke es liegt an mir, oder aber an meinem
Programmierstil.

Folgendes Tat ich

MFC Visual C++

Angelegt hab ich eine MDI

Dann noch ein CTRLdlg Dialog;
mit 3 Radiobuttons

Den Dialog erzeuge ich im CView

CCSpectralView::CCSpectralView()
.
.
.
m_nModus = 1;
m_pCViewDocCtrl = new CTRLdlg();
// Dialog erstellen und anzeigen
m_pCViewDocCtrl->Create(CTRLdlg::IDD);
m_pCViewDocCtrl->ShowWindow(SW_NORMAL);
.
.

  1. Frage , darf ich das so machen :smile:

Antwort : Bisher eigentlich Kein Problem :smile:

Dann Hab ich im View OnDraw

CCSpectralView::open_mouth:nDraw(CDC* pDC)


if (m_nModus > 1 )
{
zeichnestuss(pDC,m_nModus);
}



Nun dacht ich mir ich mach mir es einfach und
geh in Ressource Dialog auf den Radiobutton
und leg ein EreignisshÀndler an OnButtonClick

in die Funktion OnButtonClick schreib ich dann

void CTRLdlg::open_mouth:nBnClickedRadio8()
{
m_nModus = 2;
}

hab ich gemacht ,

so bis dahin gehts eigentlich, m_nModus nimmt laut Debug auch
den wert 2 an.

  1. Frage , wie greife ich nun auf CCSpectralView zu
    so das es CTRLdlg::m_nModus and die CCSpectralView::m_nModus
    zuweist.

Ich habs so gelöst das ich im View den DialogPointer nehme
und die eine Funktion aufrufe die mir
den Wert von CTRLdlg::m_nModus zurĂŒckgibt;

  1. Frage , wie greife ich dann noch auf mein Document zu.
    mit

CCSpectralView* pView = (CCSpectralView*)
AfxGetApp()->m_pMainWnd->GetActiveWindow();

lÀuft garnichts ;-(

Genau ich hab zwar jetzt den Aktuellen wert in der View
, muss dieses aber noch Invalidate() setzen um Die Ansicht zu erneuen.

nach wildem rumfummeln gelang mir das fĂŒr mein MDI

void CTRLdlg::open\_mouth:nBnClickedRadio8()
{


 m\_nModus = 1;
 CMDIChildWnd \*pActiveFrame; 
 pActiveFrame =(CMDIChildWnd\*)
 ((CMDIFrameWnd\*)(AfxGetApp()-\>m\_pMainWnd))-\>MDIGetActive();
 pActiveFrame-\>GetActiveView();
 pActiveFrame-\>Invalidate(NULL);

}

entsprechen kann man dann woh mit

pActiveDoc = (CMyDoc\*)pActiveFrame-\>GetActiveDocument();

auf Document zugreifen , was ich auch gleich tun werde,

Danke fĂŒrs lesen :smile: hoffe ihr werdet auch schlau drauss