Dialog in SDI View
-
Hallo zusammen,
mit SDI Programmierung habe ich leider noch nicht so viel Erfahrung wie ich gerne hätte, weswegen ich jetzt auch bei einer "Banalität" scheitere.
Ich schreibe an einem kleinen Programm welches auf der linken Seite eine Explorer Bar hat. Diese Bar hat eine feste Größe und soll später verschiedene Dialoge anzeigen. Diese Dialoge sollen rechts von dieser Explorer Bar angezeigt werden. Damit das leichter zu erklären ist, habe ich mal einen Screenshot gemacht:
http://img261.imageshack.us/my.php?image=exppiced9.jpg
Der weiße Bereich in dem Bild soll später den Dialog anzeigen. Momentan sieht die "OnCreate" Funktion von MainFrm.cpp so aus:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // Ansicht erstellen, um den Clientbereich des Rahmens zu belegen if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) { TRACE0("Fehler beim Erstellen des Ansichtsfensters.\n"); return -1; } // Create lower status bar if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Fehler beim Erstellen der Statusleiste.\n"); return -1; // Fehler beim Erstellen } // Create Explorer Bar if (!m_wndExpBar.Create(_T("Explorer Bar"), this, 123, CBRS_LEFT|CBRS_SIZE_DYNAMIC)) // or CBRS_RIGHT { TRACE0("Failed to create explorer bar\n"); return -1; // fail to create } m_hBigIcon[1] = CreateImageList(AfxGetApp()->m_hInstance,IDB_BITMAP1, 16,RGB(123,124,125),&m_uNumIcons,NULL, &m_hBigIcon[0], &m_hBigIcon[2]); m_wndExpBar.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndExpBar); m_wndExpBar.AddPane(IDD_DIALOG1,_T("Testleiste"), CHS_FOCUSRECT|CHS_NOSETFOCUSONCLICK|CHS_TOOLTIP| CHS_PLAYSOUND|CHS_ANIMATEFADE,MAKEINTRESOURCE(IDD_DIALOG1),this); return 0; }Dazu passend auch noch ein Teil der .h Datei:
CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CChildView m_wndView; CMainDialog m_MainDialog; CExpBarXP m_wndExpBar; HIMAGELIST m_hBigIcon[3]; UINT m_uNumIcons;Jetzt stellt sich für mich die Frage, mit welcher Methode ich den Dialog auf die rechte Seite bekomme. Wenn ich das richtig verstehe, dann ist CChildView für diesen weißen, rechten Bereich zuständig, bietet aber keine Möglichkeit einen Dialog einzubinden.
Nun hab ich gelesen, dass dafür die Klasse CFormView sich dafür anbieten würde. Muss ich jetzt die CChildView Klasse ersetzen? Und wie würde ich den Dialog dann tatsächlich auf diese, zugegebenermaßen große, Fläche bringen? Gibt es dafür Anleitungen, die ich noch nicht gefunden habe?
Viele Frage, ich weiß, aber vielleicht könnt ihr mir ja ein paar davon beantworten

Vielen dank
Mav
-
Du versuchst Dich, wenn ich es richtig verstanden habe, an einem Splitter. Links ein Baum (so der "Explorer-Style") rechts "was anderes". Wenn die Auswahl links geändert wird, soll rechts ggf. ein anderer Dialog angezeigt werden. Liege ich in dieser ersten Annahme richtig?
Gruss, Gio
-
Ja, das siehst du genau richtig. Für sowas gibts ja auch die Klasse CSplitterWnd. Aber bei der Klasse dachte ich, dass pro Splitter Window alles nur per Dialog darstellen kann.
Diese XP-Bar funktioniert nämlich nicht in einem Dialog, weswegen ich halt die jetzige Lösung gewählt habe...