Hallo!
Momentan bastle ich gerade an einer MDI Testanwendung. Jetzt habe ich einen neuen Menüpunkt zum Menü "IDR_MDIMultiViewTesTYPE" hinzugefügt. Der neue Punkt hat die ID_ANSICHT_ZOOM und hat das "checked" flag gesetzt, so dass ich hier eben wie
beim Statusbareintrag das dazuschalten und abschalten kann (oder sollte).
Die Commandmessage habe ich im View abgefangen und lege dann mit
...
void CMDIMultiViewTestView::OnAnsichtZoomview()
{
// TODO: Resource memory error handling
CCreateContext ctx;
ctx.m_pNewViewClass = RUNTIME_CLASS(CZoomView);
ctx.m_pCurrentDoc = GetDocument();
ctx.m_pLastView = this;
CMDIZoomViewFrame* new_frame = new CMDIZoomViewFrame();
CChildFrame* this_frame = (CChildFrame*)AfxGetApp()->m_pMainWnd;
if ( ! new_frame->LoadFrame(IDR_ZOOMVIEW_FRAME,
WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,
this_frame->GetParentFrame(),
&ctx))
{
// errors
}
new_frame->InitialUpdateFrame(GetDocument(),TRUE);
}
...
einen neuen Frame und einen neuen View an und verbinde das mit dem aktuellen Dokument. Das klappt soweit auch.
Jetzt möchte ich eigentlich per "GetMenu()" Zugriff auf das Menü erhalten und den Punkt "anhaken". Ich weis, dass ich mich durchhangeln muss durch die Submenüs bis ich das richtige Item habe. Dazu habe ich eine Funktion, welche mit "GetMenuItemCount()"
und einer Schleife durch das Menü geht und mir dann den Richtigen Pointer gibt. ABER: Beim Ersten
CMenu* pmenu = MeinView::GetMenu() kommt ein Pointer ungleich Null zurück, aber ein pmenu->GetMenuItemCount()" bleibt in der Assertion hängen.
afxwin1.inl: Zeile 943
_AFXWIN_INLINE
int
CMenu::GetMenuItemCount() const
{ ASSERT(::IsMenu(m_hMenu));
return
::GetMenuItemCount(m_hMenu); }
Habe schon versucht über die App (extern MyApp theApp), den ParentFrame, den View den Menüpointer zu bekommen aber jedesmal das selbe. Was kann ich machen? Wo kriege ich den richtigen Pointer her?
Den Menüpunkt habe ich in der Resource IDR_MDIMultiViewTesTYPE hinzugefügt aber IDR_MDIMultiViewTesTYPE lässt sich im Projekt nur in den Resourcendefines und beim Anlegen des DocTemplates finden.
Gruß
Georg