int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWndEx::OnCreate(lpCreateStruct) == -1) return -1; BOOL bNameValid; // 基于持久值设置视觉管理器和样式 OnApplicationLook(theApp.m_nAppLook); if (!m_wndMenuBar.Create(this)) { TRACE0("未能创建菜单栏\n"); return -1; // 未能创建 } m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY); // 防止菜单栏在激活时获得焦点 CMFCPopupMenu::SetForceMenuFocus(FALSE); if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME)) { TRACE0("未能创建工具栏\n"); return -1; // 未能创建 } CString strToolBarName; bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD); ASSERT(bNameValid); m_wndToolBar.SetWindowText(strToolBarName); CString strCustomize; bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE); ASSERT(bNameValid); m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize); // 允许用户定义的工具栏操作: InitUserToolbars(NULL, uiFirstUserToolBarId, uiLastUserToolBarId); if (!m_wndStatusBar.Create(this)) { TRACE0("未能创建状态栏\n"); return -1; // 未能创建 } m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); // TODO: 如果您不希望工具栏和菜单栏可停靠,请删除这五行 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndMenuBar); DockPane(&m_wndToolBar); // 启用 Visual Studio 2005 样式停靠窗口行为 CDockingManager::SetDockingMode(DT_SMART); // 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为 EnableAutoHidePanes(CBRS_ALIGN_ANY); // 启用工具栏和停靠窗口菜单替换 EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR); // 启用快速(按住 Alt 拖动)工具栏自定义 CMFCToolBar::EnableQuickCustomization(); if (CMFCToolBar::GetUserImages() == NULL) { // 加载用户定义的工具栏图像 if (m_UserImages.Load(_T(".\\UserImages.bmp"))) { CMFCToolBar::SetUserImages(&m_UserImages); } } // 启用菜单个性化(最近使用的命令) // TODO: 定义您自己的基本命令,确保每个下拉菜单至少有一个基本命令。 CList<UINT, UINT> lstBasicCommands; lstBasicCommands.AddTail(ID_FILE_NEW); lstBasicCommands.AddTail(ID_FILE_OPEN); lstBasicCommands.AddTail(ID_FILE_SAVE); lstBasicCommands.AddTail(ID_FILE_PRINT); lstBasicCommands.AddTail(ID_APP_EXIT); lstBasicCommands.AddTail(ID_EDIT_CUT); lstBasicCommands.AddTail(ID_EDIT_PASTE); lstBasicCommands.AddTail(ID_EDIT_UNDO); lstBasicCommands.AddTail(ID_APP_ABOUT); lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR); lstBasicCommands.AddTail(ID_VIEW_TOOLBAR); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2003); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_VS_2005); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLUE); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_SILVER); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLACK); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_AQUA); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_WINDOWS_7); CMFCToolBar::SetBasicCommands(lstBasicCommands); m_menu.AttachMenu(this->GetMenu()->GetSafeHmenu()); m_menu.ChangeMenuItem(&m_menu,TRUE); return 0; }
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1) return -1; BOOL bNameValid; // set the visual manager and style based on persisted value OnApplicationLook(theApp.m_nAppLook); CMDITabInfo mdiTabParams; mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // other styles available... mdiTabParams.m_bActiveTabCloseButton = TRUE; // set to FALSE to place close button at right of tab area mdiTabParams.m_bTabIcons = FALSE; // set to TRUE to enable document icons on MDI taba mdiTabParams.m_bAutoColor = TRUE; // set to FALSE to disable auto-coloring of MDI tabs mdiTabParams.m_bDocumentMenu = TRUE; // enable the document menu at the right edge of the tab area EnableMDITabbedGroups(TRUE, mdiTabParams); if (!m_wndMenuBar.Create(this)) { TRACE0("Failed to create menubar\n"); return -1; // fail to create } m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY); // prevent the menu bar from taking the focus on activation CMFCPopupMenu::SetForceMenuFocus(FALSE); if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } CString strToolBarName; bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD); ASSERT(bNameValid); m_wndToolBar.SetWindowText(strToolBarName); CString strCustomize; bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE); ASSERT(bNameValid); m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize); // Allow user-defined toolbars operations: InitUserToolbars(NULL, uiFirstUserToolBarId, uiLastUserToolBarId); if (!m_wndStatusBar.Create(this)) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); // TODO: Delete these five lines if you don't want the toolbar and menubar to be dockable m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndMenuBar); DockPane(&m_wndToolBar); // enable Visual Studio 2005 style docking window behavior CDockingManager::SetDockingMode(DT_SMART); // enable Visual Studio 2005 style docking window auto-hide behavior EnableAutoHidePanes(CBRS_ALIGN_ANY); // Load menu item image (not placed on any standard toolbars): CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0); // create docking windows if (!CreateDockingWindows()) { TRACE0("Failed to create docking windows\n"); return -1; } m_wndFileView.EnableDocking(CBRS_ALIGN_ANY); m_wndClassView.EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndFileView); CDockablePane* pTabbedBar = NULL; m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar); m_wndOutput.EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndOutput); m_wndProperties.EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndProperties); // Enable enhanced windows management dialog EnableWindowsDialog(ID_WINDOW_MANAGER, ID_WINDOW_MANAGER, TRUE); // Enable toolbar and docking window menu replacement EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR); // enable quick (Alt+drag) toolbar customization CMFCToolBar::EnableQuickCustomization(); if (CMFCToolBar::GetUserImages() == NULL) { // load user-defined toolbar images if (m_UserImages.Load(_T(".\\UserImages.bmp"))) { CMFCToolBar::SetUserImages(&m_UserImages); } } // enable menu personalization (most-recently used commands) // TODO: define your own basic commands, ensuring that each pulldown menu has at least one basic command. CList<UINT, UINT> lstBasicCommands; lstBasicCommands.AddTail(ID_FILE_NEW); lstBasicCommands.AddTail(ID_FILE_OPEN); lstBasicCommands.AddTail(ID_FILE_SAVE); lstBasicCommands.AddTail(ID_FILE_PRINT); lstBasicCommands.AddTail(ID_APP_EXIT); lstBasicCommands.AddTail(ID_EDIT_CUT); lstBasicCommands.AddTail(ID_EDIT_PASTE); lstBasicCommands.AddTail(ID_EDIT_UNDO); lstBasicCommands.AddTail(ID_APP_ABOUT); lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR); lstBasicCommands.AddTail(ID_VIEW_TOOLBAR); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2003); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_VS_2005); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLUE); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_SILVER); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLACK); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_AQUA); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_WINDOWS_7); lstBasicCommands.AddTail(ID_SORTING_SORTALPHABETIC); lstBasicCommands.AddTail(ID_SORTING_SORTBYTYPE); lstBasicCommands.AddTail(ID_SORTING_SORTBYACCESS); lstBasicCommands.AddTail(ID_SORTING_GROUPBYTYPE); CMFCToolBar::SetBasicCommands(lstBasicCommands); // Switch the order of document name and application name on the window title bar. This // improves the usability of the taskbar because the document name is visible with the thumbnail. ModifyStyle(0, FWS_PREFIXTITLE); return 0; }
void CMainFrame::InitRibbon () { //------------------- // Load panel images: //------------------- m_PanelImages.SetImageSize (CSize (16, 16)); m_PanelImages.Load (IDB_BUTTONS); //------------------ // Init main button: //------------------ m_MainButton.SetImage (IDB_MAIN); m_MainButton.SetText (_T("\nf")); m_MainButton.SetToolTipText (_T("File")); m_wndRibbonBar.SetApplicationButton (&m_MainButton, CSize (45, 45)); m_wndRibbonBar.SetApplicationButton (&m_MainButton, CSize (45, 45)); CMFCRibbonMainPanel* pMainPanel = m_wndRibbonBar.AddMainCategory ( _T("File"), IDB_FILESMALL, IDB_FILELARGE); pMainPanel->Add (new CMFCRibbonButton (ID_FILE_NEW, _T("&New"), 0, 0)); pMainPanel->Add (new CMFCRibbonButton (ID_FILE_OPEN, _T("&Open..."), 1, 1)); pMainPanel->Add (new CMFCRibbonButton (ID_FILE_SAVE, _T("&Save"), 2, 2)); pMainPanel->Add (new CMFCRibbonButton (ID_FILE_SAVE_AS, _T("Save &As..."), 3, 3)); std::auto_ptr<CMFCRibbonButton> apBtnPrint(new CMFCRibbonButton (ID_FILE_PRINT, _T("Print"), 6, 6)); apBtnPrint->SetKeys (_T("p"), _T("w")); apBtnPrint->AddSubItem (new CMFCRibbonLabel (_T("Preview and print the document"))); apBtnPrint->AddSubItem (new CMFCRibbonButton (ID_FILE_PRINT_DIRECT, _T("&Quick Print"), 7, 7, TRUE)); apBtnPrint->AddSubItem (new CMFCRibbonButton (ID_FILE_PRINT_PREVIEW, _T("Print Pre&view"), 8, 8, TRUE)); pMainPanel->Add (apBtnPrint.release()); pMainPanel->Add (new CMFCRibbonSeparator (TRUE)); pMainPanel->Add (new CMFCRibbonButton (ID_FILE_CLOSE, _T("&Close"), 9, 9)); pMainPanel->AddRecentFilesList (_T("Recent Documents")); pMainPanel->AddToBottom (new CMFCRibbonMainPanelButton (ID_APP_EXIT, _T("E&xit"), 15)); //-------------------------------------------- // Add "Home" category with "Clipboard" panel: //-------------------------------------------- CMFCRibbonCategory* pCategory = m_wndRibbonBar.AddCategory ( _T("&Home"), IDB_WRITE, IDB_WRITELARGE); //-------------------------- // Create "Clipboard" panel: //-------------------------- CMFCRibbonPanel* pPanelClipboard = pCategory->AddPanel ( _T("Clipboard\nd"), m_PanelImages.ExtractIcon (27)); CMFCRibbonButton* pBtnPaste = new CMFCRibbonButton (ID_EDIT_PASTE, _T("Paste\nv"), 0, 0); pBtnPaste->SetMenu (IDR_PASTE_MENU, TRUE); pPanelClipboard->Add (pBtnPaste); pPanelClipboard->Add (new CMFCRibbonButton (ID_EDIT_CUT, _T("Cut\nx"), 1)); pPanelClipboard->Add (new CMFCRibbonButton (ID_EDIT_COPY, _T("Copy\nc"), 2)); pPanelClipboard->Add (new CMFCRibbonButton (0, _T("Paint\np"), 3)); //----------------------- // Create "Window" panel: //----------------------- CMFCRibbonPanel* pPanelWindow = pCategory->AddPanel ( _T("Window\nw"), m_PanelImages.ExtractIcon (7)); pPanelWindow->Add (new CMFCRibbonCheckBox (ID_VIEW_WORKSPACE, _T("View 1\n1"))); pPanelWindow->Add (new CMFCRibbonCheckBox (ID_VIEW_WORKSPACE2, _T("View 2\n2"))); pPanelWindow->Add (new CMFCRibbonCheckBox (ID_VIEW_OUTPUT, _T("Output\no"))); pPanelWindow->Add (new CMFCRibbonSeparator); CMFCRibbonButton* pBtnWindows = new CMFCRibbonButton (0, _T("Windows\ni"), -1, 1); pBtnWindows->SetMenu (IDR_WINDOWS_MENU, TRUE); pPanelWindow->Add (pBtnWindows); //----------------------------------- // Add quick access toolbar commands: //----------------------------------- CList<UINT, UINT> lstQATCmds; lstQATCmds.AddTail (ID_FILE_SAVE); lstQATCmds.AddTail (ID_FILE_PRINT_DIRECT); m_wndRibbonBar.SetQuickAccessCommands (lstQATCmds); m_wndRibbonBar.AddToTabs (new CMFCRibbonButton (ID_APP_ABOUT, _T("\na"), m_PanelImages.ExtractIcon (0))); }
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // enable Windows XP look: CMFCVisualManager::SetDefaultManager (RUNTIME_CLASS (CMFCVisualManagerWindows)); CMFCToolBar::EnableQuickCustomization (); //--------------------------------- // Set toolbar and menu image size: //--------------------------------- CMFCToolBar::SetSizes (CSize (28, 28), CSize (22, 22)); CMFCToolBar::SetMenuSizes (CSize (22, 22), CSize (16, 16)); // TODO: Define your own basic commands. Be sure, that each pulldown // menu have at least one basic command. CList<UINT, UINT> lstBasicCommands; lstBasicCommands.AddTail (ID_VIEW_TOOLBARS); lstBasicCommands.AddTail (ID_APP_EXIT); lstBasicCommands.AddTail (ID_APP_ABOUT); lstBasicCommands.AddTail (ID_VIEW_TOOLBAR); lstBasicCommands.AddTail (ID_VIEW_CUSTOMIZE); lstBasicCommands.AddTail (ID_COMMAND_HISTORY); lstBasicCommands.AddTail (ID_VIEW_LARGEICON); lstBasicCommands.AddTail (ID_VIEW_SMALLICON); lstBasicCommands.AddTail (ID_VIEW_LIST); lstBasicCommands.AddTail (ID_VIEW_DETAILS); lstBasicCommands.AddTail (ID_EDIT_CUT); lstBasicCommands.AddTail (ID_EDIT_COPY); lstBasicCommands.AddTail (ID_EDIT_PASTE); CMFCToolBar::SetBasicCommands (lstBasicCommands); if (!m_wndMenuBar.Create (this)) { TRACE0("Failed to create menubar\n"); return -1; // fail to create } m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC); // Remove menubar gripper and borders: m_wndMenuBar.SetPaneStyle (m_wndMenuBar.GetPaneStyle() & ~(CBRS_GRIPPER | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT)); // Detect color depth. 256 color toolbars can be used in the // high or true color modes only (bits per pixel is > 8): CClientDC dc (this); BOOL bIsHighColor = dc.GetDeviceCaps (BITSPIXEL) > 8; UINT uiToolbarHotID = bIsHighColor ? IDB_TOOLBAR256 : 0; UINT uiToolbarColdID = bIsHighColor ? IDB_TOOLBARCOLD256 : 0; UINT uiMenuID = bIsHighColor ? IDB_MENU256 : IDB_MENU16; if (!m_wndToolBar.CreateEx(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME, uiToolbarColdID, uiMenuID, FALSE, 0, 0, uiToolbarHotID)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } // Remove toolbar gripper and borders: m_wndToolBar.SetPaneStyle (m_wndToolBar.GetPaneStyle() & ~(CBRS_GRIPPER | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT)); //---------------------------------------- // Create a combo box for the address bar: //---------------------------------------- if (!m_wndAddress.Create (CBS_DROPDOWN | WS_CHILD, CRect(0, 0, 200, 120), this, AFX_IDW_TOOLBAR + 1)) { TRACE0("Failed to create combobox\n"); return -1; // fail to create } // Each rebar pane will ocupy its own row: DWORD dwStyle = RBBS_GRIPPERALWAYS | RBBS_FIXEDBMP | RBBS_BREAK; if (!m_wndReBar.Create(this) || !m_wndReBar.AddBar (&m_wndMenuBar) || !m_wndReBar.AddBar (&m_wndToolBar, NULL, NULL, dwStyle) || !m_wndReBar.AddBar(&m_wndAddress, _T("Address"), NULL, dwStyle)) { TRACE0("Failed to create rebar\n"); return -1; // fail to create } m_wndMenuBar.AdjustLayout (); m_wndToolBar.AdjustLayout (); //-------------------------------------------------------------- // Set up min/max sizes and ideal sizes for pieces of the rebar: //-------------------------------------------------------------- REBARBANDINFO rbbi; CRect rectToolBar; m_wndToolBar.GetItemRect(0, &rectToolBar); rbbi.cbSize = sizeof(rbbi); rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE; rbbi.cxMinChild = rectToolBar.Width(); rbbi.cyMinChild = rectToolBar.Height(); rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * m_wndToolBar.GetCount (); m_wndReBar.GetReBarCtrl().SetBandInfo (1, &rbbi); rbbi.cxMinChild = 0; CRect rectAddress; m_wndAddress.GetEditCtrl()->GetWindowRect(&rectAddress); rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE; rbbi.cyMinChild = rectAddress.Height() + 10; rbbi.cxIdeal = 200; m_wndReBar.GetReBarCtrl().SetBandInfo (3, &rbbi); // TODO: Remove this if you don't want chevrons: m_wndMenuBar.EnableCustomizeButton (TRUE, (UINT)-1, _T("")); m_wndToolBar.EnableCustomizeButton (TRUE, (UINT)-1, _T("")); if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } if (!m_wndFoldersBar.Create (_T("Folders"), this, CRect (0, 0, 200, 200), TRUE, ID_VIEW_FOLDERS, WS_CHILD | WS_VISIBLE | CBRS_LEFT | CBRS_HIDE_INPLACE | WS_CAPTION)) { TRACE0("Failed to create folders bar\n"); return -1; // fail to create } EnableDocking (CBRS_ALIGN_ANY); m_wndReBar.EnableDocking (CBRS_TOP); DockPane (&m_wndReBar); m_wndFoldersBar.EnableDocking (CBRS_LEFT | CBRS_RIGHT); DockPane (&m_wndFoldersBar); CString strMainToolbarTitle; strMainToolbarTitle.LoadString (IDS_MAIN_TOOLBAR); m_wndToolBar.SetWindowText (strMainToolbarTitle); // TODO: Remove this if you don't want tool tips m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY); m_wndToolBar.SetPaneStyle(m_wndToolBar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY); return 0; }
void CScreenLevelList::CreateInterface() { CWindow* pw; CEdit* pe; CLabel* pl; CButton* pb; CCheck* pc; CList* pli; Math::Point pos, ddim; int res; std::string name; if ( m_category == LevelCategory::FreeGame ) { m_accessChap = m_main->GetPlayerProfile()->GetChapPassed(LevelCategory::Missions); } pos.x = 0.10f; pos.y = 0.10f; ddim.x = 0.80f; ddim.y = 0.80f; pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5); pw->SetClosable(true); if ( m_category == LevelCategory::Exercises ) res = RT_TITLE_TRAINER; if ( m_category == LevelCategory::Challenges ) res = RT_TITLE_DEFI; if ( m_category == LevelCategory::Missions ) res = RT_TITLE_MISSION; if ( m_category == LevelCategory::FreeGame ) res = RT_TITLE_FREE; if ( m_category == LevelCategory::CodeBattles ) res = RT_TITLE_CODE_BATTLES; if ( m_category == LevelCategory::CustomLevels ) res = RT_TITLE_USER; GetResource(RES_TEXT, res, name); pw->SetName(name); pos.x = 0.10f; pos.y = 0.40f; ddim.x = 0.50f; ddim.y = 0.50f; pw->CreateGroup(pos, ddim, 5, EVENT_INTERFACE_GLINTl); // orange corner pos.x = 0.40f; pos.y = 0.10f; ddim.x = 0.50f; ddim.y = 0.50f; pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner // Displays a list of chapters: pos.x = ox+sx*3; pos.y = oy+sy*10.5f; ddim.x = dim.x*7.5f; ddim.y = dim.y*0.6f; res = RT_PLAY_CHAP_CHAPTERS; if ( m_category == LevelCategory::Missions ) res = RT_PLAY_CHAP_PLANETS; if ( m_category == LevelCategory::FreeGame ) res = RT_PLAY_CHAP_PLANETS; if ( m_category == LevelCategory::CustomLevels ) res = RT_PLAY_CHAP_USERLVL; GetResource(RES_TEXT, res, name); pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL11, name); pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT); pos.y = oy+sy*6.7f; ddim.y = dim.y*4.5f; ddim.x = dim.x*6.5f; pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_CHAP); pli->SetState(STATE_SHADOW); m_chap[m_category] = m_main->GetPlayerProfile()->GetSelectedChap(m_category)-1; UpdateSceneChap(m_chap[m_category]); if ( m_category != LevelCategory::FreeGame && m_category != LevelCategory::CodeBattles && m_category != LevelCategory::CustomLevels ) // Don't show completion marks in free game, code battles and userlevels { pli->SetState(STATE_EXTEND); } // Displays a list of missions: pos.x = ox+sx*9.5f; pos.y = oy+sy*10.5f; ddim.x = dim.x*7.5f; ddim.y = dim.y*0.6f; res = RT_PLAY_LIST_LEVELS; if ( m_category == LevelCategory::Exercises ) res = RT_PLAY_LIST_EXERCISES; if ( m_category == LevelCategory::Challenges ) res = RT_PLAY_LIST_CHALLENGES; if ( m_category == LevelCategory::Missions ) res = RT_PLAY_LIST_MISSIONS; if ( m_category == LevelCategory::FreeGame ) res = RT_PLAY_LIST_FREEGAME; GetResource(RES_TEXT, res, name); pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL12, name); pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT); pos.y = oy+sy*6.7f; ddim.y = dim.y*4.5f; ddim.x = dim.x*6.5f; pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_LIST); pli->SetState(STATE_SHADOW); m_sel[m_category] = m_main->GetPlayerProfile()->GetSelectedRank(m_category)-1; UpdateSceneList(m_chap[m_category], m_sel[m_category]); if ( m_category != LevelCategory::FreeGame && m_category != LevelCategory::CodeBattles && m_category != LevelCategory::CustomLevels ) // Don't show completion marks in free game, code battles and userlevels { pli->SetState(STATE_EXTEND); } pos = pli->GetPos(); ddim = pli->GetDim(); // Displays the summary: pos.x = ox+sx*3; pos.y = oy+sy*5.4f; ddim.x = dim.x*6.5f; ddim.y = dim.y*0.6f; GetResource(RES_TEXT, RT_PLAY_RESUME, name); pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL13, name); pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT); pos.x = ox+sx*3; pos.y = oy+sy*3.6f; ddim.x = dim.x*13.4f; ddim.y = dim.y*1.9f; pe = pw->CreateEdit(pos, ddim, 0, EVENT_INTERFACE_RESUME); pe->SetState(STATE_SHADOW); pe->SetMaxChar(500); pe->SetEditCap(false); // just to see pe->SetHighlightCap(false); // Button displays the "soluce": if ( m_category != LevelCategory::Exercises && m_category != LevelCategory::FreeGame ) { pos.x = ox+sx*9.5f; pos.y = oy+sy*5.8f; ddim.x = dim.x*6.5f; ddim.y = dim.y*0.5f; pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SOLUCE); pc->SetState(STATE_SHADOW); pc->ClearState(STATE_CHECK); } m_sceneSoluce = false; UpdateSceneResume(m_chap[m_category]+1, m_sel[m_category]+1); if ( m_category == LevelCategory::Missions || m_category == LevelCategory::FreeGame || m_category == LevelCategory::CustomLevels ) { pos.x = ox+sx*9.5f; pos.y = oy+sy*2; ddim.x = dim.x*3.7f; ddim.y = dim.y*1; pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PLAY); pb->SetState(STATE_SHADOW); if ( m_maxList == 0 ) { pb->ClearState(STATE_ENABLE); } pos.x += dim.x*4.0f; ddim.x = dim.x*2.5f; pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_READ); pb->SetState(STATE_SHADOW); if ( !m_main->GetPlayerProfile()->HasAnySavedScene() ) // no file to read? { pb->ClearState(STATE_ENABLE); } } else { pos.x = ox+sx*9.5f; pos.y = oy+sy*2; ddim.x = dim.x*6.5f; ddim.y = dim.y*1; pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PLAY); pb->SetState(STATE_SHADOW); if ( m_maxList == 0 ) { pb->ClearState(STATE_ENABLE); } } pos.x = ox+sx*3; ddim.x = dim.x*4; pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_BACK); pb->SetState(STATE_SHADOW); SetBackground("textures/interface/interface.png"); CreateVersionDisplay(); if (m_category == LevelCategory::CustomLevels) { if(m_customLevelList.size() == 0) { m_main->ChangePhase(PHASE_MAIN_MENU); std::string title, text; GetResource(RES_TEXT, RT_DIALOG_NOUSRLVL_TITLE, title); GetResource(RES_TEXT, RT_DIALOG_NOUSRLVL_TEXT, text); m_dialog->StartInformation(title, title, text); } } }
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWndEx::OnCreate(lpCreateStruct) == -1) return -1; BOOL bNameValid; // set the visual manager and style based on persisted value OnApplicationLook(theApp.m_nAppLook); if (!m_wndMenuBar.Create(this)) { TRACE0("Failed to create menubar\n"); return -1; // fail to create } m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY); // prevent the menu bar from taking the focus on activation CMFCPopupMenu::SetForceMenuFocus(FALSE); if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } CString strToolBarName; bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD); ASSERT(bNameValid); m_wndToolBar.SetWindowText(strToolBarName); CString strCustomize; bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE); ASSERT(bNameValid); m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize); // Allow user-defined toolbars operations: InitUserToolbars(NULL, uiFirstUserToolBarId, uiLastUserToolBarId); if (!m_wndStatusBar.Create(this)) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); // TODO: Delete these five lines if you don't want the toolbar and menubar to be dockable m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndMenuBar); DockPane(&m_wndToolBar); // enable Visual Studio 2005 style docking window behavior CDockingManager::SetDockingMode(DT_SMART); // enable Visual Studio 2005 style docking window auto-hide behavior EnableAutoHidePanes(CBRS_ALIGN_ANY); // Enable toolbar and docking window menu replacement EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR); // enable quick (Alt+drag) toolbar customization CMFCToolBar::EnableQuickCustomization(); if (CMFCToolBar::GetUserImages() == NULL) { // load user-defined toolbar images if (m_UserImages.Load(_T(".\\UserImages.bmp"))) { CMFCToolBar::SetUserImages(&m_UserImages); } } // enable menu personalization (most-recently used commands) // TODO: define your own basic commands, ensuring that each pulldown menu has at least one basic command. CList<UINT, UINT> lstBasicCommands; lstBasicCommands.AddTail(ID_FILE_NEW); lstBasicCommands.AddTail(ID_FILE_OPEN); lstBasicCommands.AddTail(ID_FILE_SAVE); lstBasicCommands.AddTail(ID_FILE_PRINT); lstBasicCommands.AddTail(ID_APP_EXIT); lstBasicCommands.AddTail(ID_EDIT_CUT); lstBasicCommands.AddTail(ID_EDIT_PASTE); lstBasicCommands.AddTail(ID_EDIT_UNDO); lstBasicCommands.AddTail(ID_APP_ABOUT); lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR); lstBasicCommands.AddTail(ID_VIEW_TOOLBAR); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2003); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_VS_2005); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLUE); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_SILVER); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLACK); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_AQUA); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_WINDOWS_7); CMFCToolBar::SetBasicCommands(lstBasicCommands); return 0; }
void CScreenLevelList::UpdateSceneList(int chap, int &sel) { CWindow* pw; CList* pl; std::string fileName; char line[500] = {0}; int j; bool bPassed; pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW5)); if ( pw == nullptr ) return; pl = static_cast<CList*>(pw->SearchControl(EVENT_INTERFACE_LIST)); if ( pl == nullptr ) return; pl->Flush(); bool readAll = true; for ( j=0 ; j<MAXSCENE ; j++ ) { CLevelParser levelParser(m_category, chap+1, j+1); if (!levelParser.Exists()) { readAll = true; break; } else { if (!readAll) break; } try { levelParser.Load(); sprintf(line, "%d: %s", j+1, levelParser.Get("Title")->GetParam("text")->AsString().c_str()); } catch (CLevelParserException& e) { sprintf(line, "%s", (std::string("[ERROR]: ")+e.what()).c_str()); } bPassed = m_main->GetPlayerProfile()->GetLevelPassed(m_category, chap+1, j+1); pl->SetItemName(j, line); pl->SetCheck(j, bPassed); pl->SetEnable(j, true); if ( m_category == LevelCategory::Missions && !m_main->GetShowAll() && !bPassed ) { readAll = false; } } if (readAll) { m_maxList = j; } else { m_maxList = j+1; // this is not the last! } if ( sel > j-1 ) sel = j-1; pl->SetSelect(sel); pl->ShowSelect(false); // shows the selected columns }
void CScreenLevelList::UpdateSceneChap(int &chap) { CWindow* pw; CList* pl; std::string fileName; char line[500] = {0}; bool bPassed; pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW5)); if ( pw == nullptr ) return; pl = static_cast<CList*>(pw->SearchControl(EVENT_INTERFACE_CHAP)); if ( pl == nullptr ) return; pl->Flush(); int j; if ( m_category == LevelCategory::CustomLevels ) { UpdateCustomLevelList(); for ( j=0 ; j < static_cast<int>(m_customLevelList.size()) ; j++ ) { try { CLevelParser levelParser("custom", j+1, 0); levelParser.Load(); pl->SetItemName(j, levelParser.Get("Title")->GetParam("text")->AsString().c_str()); pl->SetEnable(j, true); } catch (CLevelParserException& e) { pl->SetItemName(j, (std::string("[ERROR]: ")+e.what()).c_str()); pl->SetEnable(j, false); } } } else { for ( j=0 ; j<MAXSCENE ; j++ ) { CLevelParser levelParser(m_category, j+1, 0); if (!levelParser.Exists()) break; try { levelParser.Load(); sprintf(line, "%d: %s", j+1, levelParser.Get("Title")->GetParam("text")->AsString().c_str()); } catch (CLevelParserException& e) { sprintf(line, "%s", (std::string("[ERROR]: ")+e.what()).c_str()); } bPassed = m_main->GetPlayerProfile()->GetLevelPassed(m_category, j+1, 0); pl->SetItemName(j, line); pl->SetCheck(j, bPassed); pl->SetEnable(j, true); if ( m_category == LevelCategory::Missions && !m_main->GetShowAll() && !bPassed ) { j ++; break; } if ( m_category == LevelCategory::FreeGame && j == m_accessChap ) { j ++; break; } } } if ( chap > j-1 ) chap = j-1; pl->SetSelect(chap); pl->ShowSelect(false); // shows the selected columns }
void CMessageFilter::Load() { CFile pFile; CString strFilteredPhrases, strED2KSpamPhrases; const CString strFile = Settings.General.Path + _T("\\Data\\MessageFilter.dat"); // Delete current filter (if present) if ( m_pszFilteredPhrases ) delete [] m_pszFilteredPhrases; m_pszFilteredPhrases = NULL; // Load the message filter from disk if ( pFile.Open( strFile, CFile::modeRead ) ) { try { CBuffer pBuffer; DWORD nLen = (DWORD)pFile.GetLength(); if ( ! pBuffer.EnsureBuffer( nLen ) ) AfxThrowUserException(); pBuffer.m_nLength = nLen; pFile.Read( pBuffer.m_pBuffer, pBuffer.m_nLength ); pFile.Close(); pBuffer.ReadLine( strED2KSpamPhrases ); pBuffer.ReadLine( strFilteredPhrases ); } catch ( CException* pException ) { if ( pFile.m_hFile != CFile::hFileNull ) pFile.Close(); // If file is still open close it pException->Delete(); } } // Insert some defaults if there was a read error if ( strED2KSpamPhrases.IsEmpty() ) strED2KSpamPhrases = _T("Your client is connecting too fast|Join the L33cher Team|PeerFactor|Your client is making too many connections|ZamBoR 2|AUTOMATED MESSAGE:|eMule FX the BEST eMule ever|DI-Emule"); if ( strFilteredPhrases.IsEmpty() ) strFilteredPhrases = _T(""); // Load the ED2K spam into the filter if ( strED2KSpamPhrases.GetLength() > 3 ) { LPCTSTR pszPtr = strED2KSpamPhrases; int nWordLen = 3; CList< CString > pWords; int nStart = 0, nPos = 0; for ( ; *pszPtr ; nPos++, pszPtr++ ) { if ( *pszPtr == '|' ) { if ( nStart < nPos ) { pWords.AddTail( strED2KSpamPhrases.Mid( nStart, nPos - nStart ) ); nWordLen += ( nPos - nStart ) + 1; } nStart = nPos + 1; } } if ( nStart < nPos ) { pWords.AddTail( strED2KSpamPhrases.Mid( nStart, nPos - nStart ) ); nWordLen += ( nPos - nStart ) + 1; } m_pszED2KSpam = new TCHAR[ nWordLen ]; LPTSTR pszFilter = m_pszED2KSpam; for ( POSITION pos = pWords.GetHeadPosition() ; pos ; ) { CString strWord( pWords.GetNext( pos ) ); ToLower( strWord ); CopyMemory( pszFilter, (LPCTSTR)strWord, sizeof( TCHAR ) * ( strWord.GetLength() + 1 ) ); pszFilter += strWord.GetLength() + 1; } *pszFilter++ = 0; *pszFilter++ = 0; } // Load the blocked strings into the filter if ( strFilteredPhrases.GetLength() > 3 ) { LPCTSTR pszPtr = strFilteredPhrases; int nWordLen = 3; CList< CString > pWords; int nStart = 0, nPos = 0; for ( ; *pszPtr ; nPos++, pszPtr++ ) { if ( *pszPtr == '|' ) { if ( nStart < nPos ) { pWords.AddTail( strFilteredPhrases.Mid( nStart, nPos - nStart ) ); nWordLen += ( nPos - nStart ) + 1; } nStart = nPos + 1; } } if ( nStart < nPos ) { pWords.AddTail( strFilteredPhrases.Mid( nStart, nPos - nStart ) ); nWordLen += ( nPos - nStart ) + 1; } m_pszFilteredPhrases = new TCHAR[ nWordLen ]; LPTSTR pszFilter = m_pszFilteredPhrases; for ( POSITION pos = pWords.GetHeadPosition() ; pos ; ) { CString strWord( pWords.GetNext( pos ) ); ToLower( strWord ); CopyMemory( pszFilter, (LPCTSTR)strWord, sizeof( TCHAR ) * ( strWord.GetLength() + 1 ) ); pszFilter += strWord.GetLength() + 1; } *pszFilter++ = 0; *pszFilter++ = 0; } }
void CAdultFilter::Load() { CFile pFile; CString strBlockedWords, strDubiousWords, strChildWords; const CString strFile = Settings.General.Path + _T("\\Data\\AdultFilter.dat"); // Settings.General.DataPath ? // Delete current adult filters (if present) if ( m_pszBlockedWords ) delete [] m_pszBlockedWords; m_pszBlockedWords = NULL; if ( m_pszDubiousWords ) delete [] m_pszDubiousWords; m_pszDubiousWords = NULL; if ( m_pszChildWords ) delete [] m_pszChildWords; m_pszChildWords = NULL; // Load the adult filter from disk if ( pFile.Open( strFile, CFile::modeRead ) ) { try { CBuffer pBuffer; const DWORD nLen = (DWORD)pFile.GetLength(); if ( ! pBuffer.EnsureBuffer( nLen ) ) AfxThrowUserException(); pBuffer.m_nLength = nLen; pFile.Read( pBuffer.m_pBuffer, pBuffer.m_nLength ); pFile.Close(); pBuffer.ReadLine( strBlockedWords ); // Line 1: words that are blocked if ( ! strBlockedWords.IsEmpty() && strBlockedWords.GetAt( 0 ) == '#' ) strBlockedWords.Empty(); pBuffer.ReadLine( strDubiousWords ); // Line 2: words that may be okay if ( ! strDubiousWords.IsEmpty() && strDubiousWords.GetAt( 0 ) == '#' ) strDubiousWords.Empty(); pBuffer.ReadLine( strChildWords ); // Line 3: words for child pornography if ( ! strChildWords.IsEmpty() && strChildWords.GetAt( 0 ) == '#' ) strChildWords.Empty(); } catch ( CException* pException ) { if ( pFile.m_hFile != CFile::hFileNull ) pFile.Close(); // File is still open so close it pException->Delete(); } } // Insert some defaults if the load failed if ( strBlockedWords.IsEmpty() ) strBlockedWords = L"xxx p**n f**k c**k c**t v****a pussy nude naked boobs breast hentai " L"lesbian w***e shit rape preteen hardcore lolita playboy penthouse " L"topless r-rated x-rated d***o pr0n erotic sexy o****m nipple fetish " L"upskirt beastiality bestiality pedofil necrofil t**s lolicon shemale fisting"; if ( strDubiousWords.IsEmpty() ) strDubiousWords = L"ass sex anal gay teen thong babe bikini viagra dick cum s***s"; if ( strChildWords.IsEmpty() ) strChildWords = L"child preteen"; // Load the blocked words into the Adult Filter if ( strBlockedWords.GetLength() > 3 ) { LPCTSTR pszPtr = strBlockedWords; int nWordLen = 3; CList< CString > pWords; int nStart = 0, nPos = 0; for ( ; *pszPtr ; nPos++, pszPtr++ ) { if ( *pszPtr == ' ' ) { if ( nStart < nPos ) { pWords.AddTail( strBlockedWords.Mid( nStart, nPos - nStart ) ); nWordLen += ( nPos - nStart ) + 1; } nStart = nPos + 1; } } if ( nStart < nPos ) { pWords.AddTail( strBlockedWords.Mid( nStart, nPos - nStart ) ); nWordLen += ( nPos - nStart ) + 1; } m_pszBlockedWords = new TCHAR[ nWordLen ]; LPTSTR pszFilter = m_pszBlockedWords; for ( POSITION pos = pWords.GetHeadPosition() ; pos ; ) { CString strWord( pWords.GetNext( pos ) ); ToLower( strWord ); CopyMemory( pszFilter, (LPCTSTR)strWord, sizeof( TCHAR ) * ( strWord.GetLength() + 1 ) ); pszFilter += strWord.GetLength() + 1; } *pszFilter++ = 0; *pszFilter++ = 0; } // Load the possibly blocked words into the Adult Filter if ( strDubiousWords.GetLength() > 3 ) { LPCTSTR pszPtr = strDubiousWords; int nWordLen = 3; CList< CString > pWords; int nStart = 0, nPos = 0; for ( ; *pszPtr ; nPos++, pszPtr++ ) { if ( *pszPtr == ' ' ) { if ( nStart < nPos ) { pWords.AddTail( strDubiousWords.Mid( nStart, nPos - nStart ) ); nWordLen += ( nPos - nStart ) + 1; } nStart = nPos + 1; } } if ( nStart < nPos ) { pWords.AddTail( strDubiousWords.Mid( nStart, nPos - nStart ) ); nWordLen += ( nPos - nStart ) + 1; } m_pszDubiousWords = new TCHAR[ nWordLen ]; LPTSTR pszFilter = m_pszDubiousWords; for ( POSITION pos = pWords.GetHeadPosition() ; pos ; ) { CString strWord( pWords.GetNext( pos ) ); ToLower( strWord ); CopyMemory( pszFilter, (LPCTSTR)strWord, sizeof( TCHAR ) * ( strWord.GetLength() + 1 ) ); pszFilter += strWord.GetLength() + 1; } *pszFilter++ = 0; *pszFilter++ = 0; } // Load child pornography words into the Adult Filter if ( strChildWords.GetLength() > 3 ) { LPCTSTR pszPtr = strChildWords; int nWordLen = 3; CList< CString > pWords; int nStart = 0, nPos = 0; for ( ; *pszPtr ; nPos++, pszPtr++ ) { if ( *pszPtr == ' ' ) { if ( nStart < nPos ) { pWords.AddTail( strChildWords.Mid( nStart, nPos - nStart ) ); nWordLen += ( nPos - nStart ) + 1; } nStart = nPos + 1; } } if ( nStart < nPos ) { pWords.AddTail( strChildWords.Mid( nStart, nPos - nStart ) ); nWordLen += ( nPos - nStart ) + 1; } m_pszChildWords = new TCHAR[ nWordLen ]; LPTSTR pszFilter = m_pszChildWords; for ( POSITION pos = pWords.GetHeadPosition() ; pos ; ) { CString strWord( pWords.GetNext( pos ) ); ToLower( strWord ); CopyMemory( pszFilter, (LPCTSTR)strWord, sizeof( TCHAR ) * ( strWord.GetLength() + 1 ) ); pszFilter += strWord.GetLength() + 1; } *pszFilter++ = 0; *pszFilter++ = 0; } }
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1) return -1; BOOL bNameValid; // 基于持久值设置视觉管理器和样式 OnApplicationLook(theApp.m_nAppLook); CMDITabInfo mdiTabParams; mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_VS2005; // 其他可用样式... mdiTabParams.m_bActiveTabCloseButton = TRUE; // 设置为 FALSE 会将关闭按钮放置在选项卡区域的右侧 mdiTabParams.m_bTabIcons = FALSE; // 设置为 TRUE 将在 MDI 选项卡上启用文档图标 mdiTabParams.m_bAutoColor = FALSE; // 设置为 FALSE 将禁用 MDI 选项卡的自动着色 mdiTabParams.m_bDocumentMenu = TRUE; // 在选项卡区域的右边缘启用文档菜单 mdiTabParams.m_bEnableTabSwap = TRUE; //启用选项卡交换 mdiTabParams.m_bTabCustomTooltips = TRUE; EnableMDITabbedGroups(TRUE, mdiTabParams); if (!m_wndMenuBar.Create(this)) { TRACE0("未能创建菜单栏\n"); return -1; // 未能创建 } m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY); //取消首先显示最近使用的命令 CMFCMenuBar::SetRecentlyUsedMenus(FALSE); // 防止菜单栏在激活时获得焦点 CMFCPopupMenu::SetForceMenuFocus(FALSE); if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_HC : IDR_MAINFRAME)) { TRACE0("未能创建工具栏\n"); return -1; // 未能创建 } // Create FormEdit toolbar if (!m_wndToolbarFormEdit.Create(this, WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_HIDE_INPLACE|CBRS_SIZE_DYNAMIC| CBRS_GRIPPER | CBRS_BORDER_3D, ID_VIEW_FORMEDIT_TOOLBAR) || !m_wndToolbarFormEdit.LoadToolBar(IDR_FORMEDIT)) { TRACE0("未能创建窗口编辑工具栏\n"); return FALSE; // 未能创建 } CString strToolBarName; bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD); ASSERT(bNameValid); m_wndToolBar.SetWindowText(strToolBarName); CString strCustomize; bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE); ASSERT(bNameValid); m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize); CString strFormEditToolBarName; bNameValid = strFormEditToolBarName.LoadString(IDS_TOOLBAR_FORMEDIT); ASSERT(bNameValid); m_wndToolbarFormEdit.SetWindowText(strFormEditToolBarName); m_wndToolbarFormEdit.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize); // 允许用户定义的工具栏操作: InitUserToolbars(NULL, uiFirstUserToolBarId, uiLastUserToolBarId); if (!m_wndStatusBar.Create(this)) { TRACE0("未能创建状态栏\n"); return -1; // 未能创建 } m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); // TODO: 如果您不希望工具栏和菜单栏可停靠,请删除这五行 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolbarFormEdit.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndMenuBar); DockPane(&m_wndToolBar); DockPane(&m_wndToolbarFormEdit); DockPaneLeftOf(&m_wndToolBar, &m_wndToolbarFormEdit); // 启用 Visual Studio 2005 样式停靠窗口行为 CDockingManager::SetDockingMode(DT_SMART); // 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为 EnableAutoHidePanes(CBRS_ALIGN_ANY); // 加载菜单项图像(不在任何标准工具栏上): CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0); // 创建停靠窗口 if (!CreateDockingWindows()) { TRACE0("未能创建停靠窗口\n"); return -1; } m_wndFileView.EnableDocking(CBRS_ALIGN_ANY); m_wndClassView.EnableDocking(CBRS_ALIGN_ANY); m_wndResourceView.EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndFileView); CDockablePane* pTabbedBar = NULL; m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar); m_wndResourceView.AttachToTabWnd(pTabbedBar, DM_SHOW, TRUE, &pTabbedBar); m_wndProperties.EnableDocking(CBRS_ALIGN_RIGHT); m_wndToolBox.EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndProperties); DockPane(&m_wndToolBox); // 启用增强的窗口管理对话框 EnableWindowsDialog(ID_WINDOW_MANAGER, IDS_WINDOWS_MANAGER, TRUE); // 启用工具栏和停靠窗口菜单替换 EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR, FALSE, TRUE); // 启用快速(按住 Alt 拖动)工具栏自定义 CMFCToolBar::EnableQuickCustomization(); if (CMFCToolBar::GetUserImages() == NULL) { // 加载用户定义的工具栏图像 if (m_UserImages.Load(_T(".\\UserImages.bmp"))) { m_UserImages.SetImageSize(CSize(16, 16), FALSE); CMFCToolBar::SetUserImages(&m_UserImages); } } // 启用菜单个性化(最近使用的命令) // TODO: 定义您自己的基本命令,确保每个下拉菜单至少有一个基本命令。 CList<UINT, UINT> lstBasicCommands; lstBasicCommands.AddTail(ID_FILE_NEW); lstBasicCommands.AddTail(ID_FILE_OPEN); lstBasicCommands.AddTail(ID_FILE_SAVE); lstBasicCommands.AddTail(ID_FILE_PRINT); lstBasicCommands.AddTail(ID_APP_EXIT); lstBasicCommands.AddTail(ID_EDIT_CUT); lstBasicCommands.AddTail(ID_EDIT_PASTE); lstBasicCommands.AddTail(ID_EDIT_UNDO); lstBasicCommands.AddTail(ID_APP_ABOUT); lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR); lstBasicCommands.AddTail(ID_VIEW_TOOLBAR); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2003); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_VS_2005); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLUE); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_SILVER); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLACK); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_AQUA); lstBasicCommands.AddTail(ID_SORTING_SORTALPHABETIC); lstBasicCommands.AddTail(ID_SORTING_SORTBYTYPE); lstBasicCommands.AddTail(ID_SORTING_SORTBYACCESS); lstBasicCommands.AddTail(ID_SORTING_GROUPBYTYPE); CMFCToolBar::SetBasicCommands(lstBasicCommands); return 0; }