bool CParticleEditor::ShowGraph() { CMDIFrameWnd *pMainWnd = DYNAMIC_DOWNCAST(CMDIFrameWnd, AfxGetMainWnd()); ASSERT(pMainWnd != NULL); // do not create toolbar second time if (IsWindow(m_ParticleGraph)) { //BOOL bShown = m_ParticleGraph.ShowWindow(SW_SHOW); //if (!bShown) // pMainWnd->DockControlBar(&m_ParticleGraph, AFX_IDW_DOCKBAR_BOTTOM, NULL); return false; } if (!m_ParticleGraph.Create(_T("Particle Graph"), WS_CHILD | WS_VISIBLE, pMainWnd, ID_VIEW_GRAPH)) { m_ToolBox->Log(LOGERROR, _T("Failed to create m_ParticleGraph window bar\n")); return false; } m_ParticleGraph.EnableDocking(CBRS_ALIGN_ANY); const DWORD dwBarStyle = CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC; m_ParticleGraph.SetBarStyle(m_ParticleGraph.GetBarStyle() | dwBarStyle); pMainWnd->DockControlBar(&m_ParticleGraph, AFX_IDW_DOCKBAR_BOTTOM, NULL); return true; }
int CSpeechFrm::OnCreate(LPCREATESTRUCT lpCreateStruct) { CMDIFrameWnd *mainWnd; // Register the doc templates we provide to the app CWinApp* pApp = AfxGetApp(); ASSERT(pApp != NULL); mainWnd = DYNAMIC_DOWNCAST(CMDIFrameWnd, pApp->m_pMainWnd); // get the apps instance handle for loading resources m_AppInst = AfxGetResourceHandle(); // now tell the application to look in dll for resources AfxSetResourceHandle(ObjectSpeechDLL.hModule); if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_SpeechToolPal.CreateEx(mainWnd, TBSTYLE_FLAT | TBSTYLE_WRAPABLE , WS_CHILD | WS_VISIBLE | CBRS_RIGHT | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED, CRect(0, 2, 2, 4)) || !m_SpeechToolPal.LoadToolBar(IDR_Speech_TOOL_PALETTE)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } m_SpeechToolPal.SetBorders(2, 2, 2, 2); m_SpeechToolPal.EnableDocking(CBRS_ORIENT_VERT); // make control bar notify us. mainWnd->DockControlBar(&m_SpeechToolPal); CRect tcRect; m_SpeechToolPal.GetToolBarCtrl().SetRows(1, FALSE, tcRect); int iconWidth; int iconHeight; int nRows; iconWidth = tcRect.Width()/NUMICONS; iconHeight = tcRect.Height(); nRows = (NUMICONS / NICONSWIDE) + (((NUMICONS % NICONSWIDE) == 0) ? 0 : 1); tcRect.SetRect(0, 0, iconWidth * NICONSWIDE, (iconHeight * nRows)); // Set the window size m_SpeechToolPal.SetWindowPos(NULL, 0, 0, tcRect.Width(), tcRect.Height(), SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOREDRAW); mainWnd->ShowControlBar(&m_SpeechToolPal, FALSE, FALSE); AfxSetResourceHandle(m_AppInst); return 0; }
bool CParticleEditor::ShowTree() { // do not create toolbar second time if (IsWindow(m_ParticleTreeDock)) { //m_ParticleTreeDock.ShowWindow(SW_SHOW); return false; } CMDIFrameWnd *pMainWnd = DYNAMIC_DOWNCAST(CMDIFrameWnd, AfxGetMainWnd()); ASSERT(pMainWnd != NULL); if (!m_ParticleTreeDock.Create(_T("Particle Tree"), WS_CHILD | WS_VISIBLE, pMainWnd, IDD_PARTICLE_TREEDOCKBAR)) { m_ToolBox->Log(LOGERROR, _T("Failed to create m_ParticleTreeDock window bar\n")); return false; } m_ParticleTreeDock.EnableDocking(CBRS_ALIGN_ANY); const DWORD dwBarStyle = CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC; m_ParticleTreeDock.SetBarStyle(m_ParticleTreeDock.GetBarStyle() | dwBarStyle); // dock property dock bar on left pMainWnd->DockControlBar(&m_ParticleTreeDock, AFX_IDW_DOCKBAR_RIGHT, NULL); return true; }
void CDynToolBar::LoadState(char* pFilename) { CProfINIFile PF(pFilename); CMDIFrameWnd* pM = pTBMngr->pMainFrame; Strng Section; Section.Set("ToolBar_%d", iWindowID); Strng NewTitle = PF.RdStr(Section(), "Title", (char*)(const char*)sTitle); if (NewTitle.Length()!=sTitle.GetLength() || strcmp(NewTitle(), (const char*)sTitle)!=0) { SetWindowText(NewTitle()); sTitle = NewTitle(); } DWORD BarStyle = GetBarStyle(); DWORD Style = GetStyle(); BarStyle = PF.RdLong(Section(), "BarStyle", BarStyle); BarStyle &= CBRS_ALL; //CNM Prevent an ASSERT SetBarStyle(BarStyle); if (bCanConfigure) { CToolBarCtrl& bc = GetToolBarCtrl(); int Cnt = bc.GetButtonCount(); Cnt = PF.RdInt(Section(), "ButtonIDCount", Cnt); BOOL Chngd = (Cnt!=bc.GetButtonCount()); UINT* NewIDs = new UINT[Cnt]; Strng Item; for (int i=0; i<Cnt; i++) { Item.Set("ID_%d", i); int Cmd = (i<(int)iLen ? BtnIDs[i] : ID_SEPARATOR); Cmd = PF.RdInt(Section(), Item(), Cmd); NewIDs[i] = (UINT)Cmd; Chngd = (Chngd || (NewIDs[i]!=BtnIDs[i])); } if (Chngd) ChangeButtons(NewIDs, Cnt); delete []NewIDs; } flag Visible = ((Style & WS_VISIBLE) != 0); Visible = PF.RdInt(Section(), "Visible", Visible); pM->ShowControlBar(this, Visible, FALSE); pM->RecalcLayout(); //get MFC to adjust the dimensions of all docked ToolBars so that GetWindowRect will be accurate CRect Rect; CWnd* pWnd = GetParent(); if (BarStyle & CBRS_FLOATING) { if (pWnd && pWnd->GetParent()) { if (PrjFileVerNo()>=25) { CRect MRect; AfxGetMainWnd()->GetWindowRect(MRect); Rect.OffsetRect(-MRect.left, -MRect.top); int L=PF.RdInt(Section(), "Left", Rect.left); int T=PF.RdInt(Section(), "Top", Rect.top); Rect.OffsetRect(L-Rect.left, T-Rect.top); Rect.OffsetRect(+MRect.left, +MRect.top); } else { pWnd->GetParent()->GetWindowRect(&Rect); Location.x = PF.RdInt(Section(), "Left", Rect.left); Location.y = PF.RdInt(Section(), "Top", Rect.top); } pM->FloatControlBar(this, Location); } } else { GetWindowRect(&Rect); if (PrjFileVerNo()>=25) { CRect MRect; AfxGetMainWnd()->GetWindowRect(MRect); Rect.OffsetRect(-MRect.left, -MRect.top); int L=PF.RdInt(Section(), "Left", Rect.left); int T=PF.RdInt(Section(), "Top", Rect.top); Rect.OffsetRect(L-Rect.left, T-Rect.top); Rect.OffsetRect(+MRect.left, +MRect.top); } else { //Rect.left = PF.RdInt(Section(), "Left", Rect.left); //Rect.top = PF.RdInt(Section(), "Top", Rect.top); int L=PF.RdInt(Section(), "Left", Rect.left); int T=PF.RdInt(Section(), "Top", Rect.top); Rect.right += L-Rect.left; Rect.bottom += T-Rect.top; Rect.left += L-Rect.left; Rect.top += T-Rect.top; } //Rect.top = PF.RdInt(Section(), "Top", Rect.top); UINT n = 0; if (BarStyle & CBRS_ALIGN_TOP) { Rect.top -= 1; Rect.bottom -= 1; n = AFX_IDW_DOCKBAR_TOP; } if (n==0 && BarStyle & CBRS_ALIGN_BOTTOM) { Rect.top += 1; Rect.bottom += 1; n = AFX_IDW_DOCKBAR_BOTTOM; } if (n==0 && BarStyle & CBRS_ALIGN_LEFT) { Rect.left -= 1; Rect.right -= 1; n = AFX_IDW_DOCKBAR_LEFT; } if (n==0 && BarStyle & CBRS_ALIGN_RIGHT) { Rect.left += 1; Rect.right += 1; n = AFX_IDW_DOCKBAR_RIGHT; } pM->DockControlBar(this, n, &Rect); } pM->RecalcLayout(); }