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!!!


  • Mod

    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.


  • Mod

    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.asp

    Etwas 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.


  • Mod

    Wer hat behauptet, dass dies einfach wäre? 🕶



  • muss ich das als ATL/WTL Projekt erstellen oder get es auch als MFC?


  • Mod

    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;
    }
    

  • Mod

    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.


Anmelden zum Antworten