C...View ==> CMainFrame
-
Hallo,
ich habe eine MFC Anwendung erstellt. In der Klasse CMainFrame habe ich einen zusätzlichen CDialogBar in der Toolbar eingefügt. In diesem neuen Toolbar gibt es einen ComboBox(Kombinationsfeld). Das Problem ist, ich will mal das ComboBox aktivieren / deactivieren. Dies soll von der Klasse C...View statt statt finden. Ich habe es probirt von der C...View auf die Toolbar so zuzugreifen:void CE_LearnView::Request(CString Link){ m_strLink = Link; // Funktion Link anzeigen Navigate2(_T(m_strLink),0,NULL); CWinApp* ptrApp = AfxGetApp(); CMainFrame* pFrame = (CMainFrame*)ptrApp; pFrame->GetDlgItem(IDC_AUSWERTUNG)->EnableWindow(FALSE); }// ende
Ich bekomme Laufzeitfelermeldung.
Könnte mir bitte jemand sagen bzw. zeigen, wie ich von der Klasse C...View ein ComboBox Element (im Toolbar verwendet) activieren un deactivieren kann???
-
Don_Pazo schrieb:
CWinApp* ptrApp = AfxGetApp(); CMainFrame* pFrame = (CMainFrame*)ptrApp;
CWinApp und CMainFrame sind NICHT miteinander verwandt, das kannst du nicht casten.
Nimm AfxGetMainWnd statt AfxGetApp.
PS: Und schau dir bei Gelegenheit mal an, unter welchen Umständen gecastet werden kann und wann nicht.
-
So komme ich leider nicht weiter.
Wie soll ich es umcasten. Dies ist mir ein Retzel??
-
Speichere "CDialogBar" als Member von "CMainFrame" (public) und verwende dann
"AfxGetMainWnd()" um an den Klassenzeiger zu kommen und greife auf die DialogBar zu.
-
RR schrieb:
Speichere "CDialogBar" als Member von "CMainFrame" (public) und verwende dann
"AfxGetMainWnd()" um an den Klassenzeiger zu kommen und greife auf die DialogBar zu.Der CWnd-Pointer den AfxGetMainWnd() liefert muss aber auch hier noch nach CMainFrame* gecastet werden, sonst klappt das nicht.
-
Danke RR,
darauf bin ich nicht gekommen. Und so funktioniert es prima:Für die Suchmaschine zugriff von C...View auf CMainFrame
//// C...View.cpp void CE_LearnView::Request(CString Link){ m_strLink = Link; // Funktion Link anzeigen Navigate2(_T(m_strLink),0,NULL); CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd(); pFrame->m_wndDlgBar.GetDlgItem(IDC_AUSWERTUNG)->EnableWindow(FALSE); }// ende
// CMainFrame.h class CMainFrame : public CFrameWnd{ public: CDialogBar m_wndDlgBar; .... protected: // Eingebundene Elemente der Steuerleiste CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CReBar m_wndReBar;
-