Fenster Layout
-
Hallo,
ich würde gerne sowas hier erstellen http://morides.mo.funpic.de/window.jpg
so das man z.b. das Fester #4 aus dem hauptprogramm rausziehen kann und wieder zurück einbetten kann.
Toolbar im selben design würde auch echt super sein.
Wie und womit kann ich es am besten machen?Danke schon mal für die Antworten!!!
-
Kommerzielle Lösungen wie:
www.bcgsoft.com
www.codejock.com
www.prof-uis.com
können das entsprechend. Es selber machn ist ziemlich übel, aber sicher es geht.HTH
-
die optik würde schon echt super sein, aber die funktion bei den fenstern würde mir für den anfang schon reichen.
-
Und ich meinte nicht das Aussehen, das ist nur ein Gimik.
Das ganze mit den dockbaren Fenstern ist eine üble Geschichte.Hier als WTL
http://www.codeproject.com/wtl/docktabframe.aspEtwas speziell, aber evtl. nutzbarer Code:
http://www.codeproject.com/docking/PinOutBarEx.asp
-
Danke!
hätte nie gedacht, dass man bei sowas einfachem mit c++ solche probleme gibt.
-
Wer hat behauptet, dass dies einfach wäre?
-
muss ich das als ATL/WTL Projekt erstellen oder get es auch als MFC?
-
Ich habe es nur angegeben weil ich kein anderes kenne. Du müsstest es überarbeiten oder Du arbeitest basierend auf dem zweiten Sample.
Mein Rat wäre immer noch eine kommerzielle Lösung zu verwenden!
-
eine kommerzielle Lösung ist sicherlich das beste, aber die Preise kann man sich als normal sterblicher nicht leisten.
-
In C++ ist das auch nicht schwer, es hat nichts mit der Sprache zu tun. Es ist eher ein Problem von der MFC, denn die hat sowas von Haus aus nicht dabei. Aber man kann die MFC ja erweitern um weitere Klassen, was ja auch legitim ist.
Auf Codeproject.com gibts ein paar docking-Klassen, einfach mal umschauen was dir da gefällt und womit du zurecht kommst (also auch AUSPROBIEREN!).
Ansonst gibt es sicherlich auch für normalsterbliche Dockingframeworks zu kaufen. Wenn du das ganze beruflich machst, wälze die Kosten dafür auf deine Kunden um, wie jedes andere Unternehmen auch.
Wenn du nicht auf MFC festgelegt bist, dann schau dir mal wxWidgets an, da gibts schon Dockingfunktionen.
-
ich bekomme die Fenster beim Start von der Aufteilung nicht so wie hier auf dem bild
http://morides.mo.funpic.de/window.jpg.
Bei mir sieht es im moment so aus http://morides.mo.funpic.de/demo.jpg.
Ich hab keine Ahnung welche werte ich bei CRect eintragen soll.
Bitte um Hilfe
DANKE!!!!!!void CMainFrame::InitializeDefaultPanes(void) { CRect rcClient; this->GetClientRect(&rcClient); CRect rcFloat(0,0,400,200); CRect rcDock(0,0,200,rcClient.Width()-200); //fuck TabIcons CImageList tabIcons; tabIcons.Create(IDB_MSDEV_TAB_ICONS, 16, 4, RGB(0,255,0)); HWND hWndTree = this->CreatePlainTextOutputPane(m_CommandWindowView, _T("Command Window"), tabIcons.ExtractIcon(1), rcFloat, rcDock, NULL, dockwins::CDockingSide::sLeft); CRect rcFloat2(0,0,400,200); CRect rcDock2(0,0,200,rcClient.Width()-200);; HWND hWndMain = this->CreatePlainTextOutputPane(m_Map, _T("Map"), tabIcons.ExtractIcon(5), rcFloat2, rcDock2, NULL, dockwins::CDockingSide::sSingle); this->CreatePlainTextOutputPane(m_OutputView, _T("Output"), tabIcons.ExtractIcon(2), rcFloat2, rcDock2, hWndMain, dockwins::CDockingSide::sSingle); CRect rcFloat3(0,0,300,200); CRect rcDock3(0,0,200,0); HWND hWndLog = this->CreatePlainTextOutputPane(m_TestDialog, _T("Test Dialog"), tabIcons.ExtractIcon(4), rcFloat3, rcDock3, NULL, dockwins::CDockingSide::sSingle); this->CreatePlainTextOutputPane(m_TaskListView, _T("Task List"), tabIcons.ExtractIcon(3), rcFloat3, rcDock3, hWndLog, dockwins::CDockingSide::sSingle); } HWND CMainFrame::CreatePlainTextOutputPane(CPlainTextView& view, LPCTSTR sName, HICON hIcon, CRect& rcFloat, CRect& rcDock, HWND hDockTo, WPARAM posFrame) { HWND hWndPane = NULL; // Task List CTabbedAutoHideDockingWindow* pPaneWindow = CTabbedAutoHideDockingWindow::CreateInstance(); if(pPaneWindow) { DWORD dwStyle=WS_OVERLAPPEDWINDOW | WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; //DWORD dwStyle = WS_CAPTION|WS_SYSMENU| WS_OVERLAPPEDWINDOW | WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; hWndPane = pPaneWindow->Create(m_hWnd,rcFloat,sName,dwStyle); DockWindow( *pPaneWindow, dockwins::CDockingSide(posFrame), 0 /*nBar*/, float(0.0)/*fPctPos*/, rcDock.Width() /* nWidth*/, rcDock.Height() /* nHeight*/); view.Create(hWndPane, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_HSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | ES_NOHIDESEL, WS_EX_CLIENTEDGE); view.SetIcon(hIcon, ICON_SMALL); m_PaneWindowIcons.insert(m_PaneWindowIcons.end(), hIcon); m_PaneWindows.insert(m_PaneWindows.end(), pPaneWindow); pPaneWindow->SetReflectNotifications(false); pPaneWindow->SetClient(view); if(hDockTo) { pPaneWindow->DockTo(hDockTo, (int)m_PaneWindows.size()); } } return hWndPane; }
-
Morides schrieb:
eine kommerzielle Lösung ist sicherlich das beste, aber die Preise kann man sich als normal sterblicher nicht leisten.
Ich hoffe das meine Firma nicht so schnelle "sterblich" ist...
Die Kosten für diese Bibliotheken, die ich genannt habe, halte ich wirklich für günstig, da man auch den kompletten Sourcecode erhält und damit auch abgesichert ist. Für einen reinen Hobbyprogrammierer ist das natürlich ein Problem.Ansonsten Konditionen lesen.
BCG-Soft hatte auch eine Version, die an Hobby Programmierer weitergegeben wurde. Ich weiß allerdings ob das noch heute möglich ist. Man musste sich nur registrieren lassen per Emal an den Hersteller.
-
im moment bin mit der lösung zufrieden, nur wie ich schon oben geschrieben habe, bekomme ich die fenster nicht in die richtige position.
Das erste fenster dockt am linken rand an, das zweite soll an das erste fenster andocken und das ditte dann auch den ersten und unter dem zweiten.