原創|其它|編輯:郝浩|2012-09-21 11:35:02.000|閱讀 3703 次
概述:本文主要介紹在使用BCGControlBar時,如何在對話框中使用菜單、工具欄。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
(1)在對話框資源中進行占位,設置相應ID,產生相應變量
CStatic m_wndMenuBarLocation;//菜單 CStatic m_wndStatusBarLocation;//狀態欄 CStatic m_wndToolbarLocation;//工具欄 CStatic m_wndOutlookBarLocation;//Outlook側邊欄 CStatic m_wndCaptionLocation;//標題欄
(2)有關菜單的類
class CMyMenuBar : public CBCGPMenuBar class CCmdFrame : public CBCGPFrameWnd
構造函數CCmdFrame(CBCGPDialog* pDlg);
BOOL CCmdFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { ASSERT_VALID (m_pDlg); return m_pDlg- >OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);//轉由對話框處理 } class CMyFrameImpl : public CBCGPFrameImpl //CBCGPFrameImpl實現工具欄的管理,包括從注冊表讀寫狀態,docking,鍵盤和鼠標消息等 { CMyFrameImpl() : CBCGPFrameImpl (NULL) {} friend class CCmdFrame; }; void CCmdFrame::SetMenuBar (CBCGPMenuBar* pMenuBar) { ((CMyFrameImpl &)m_Impl).m_pMenuBar = pMenuBar;//實際是把CMyMenuBar綁定到CMyFrameImpl }
(3) 對話框類
頭文件
#define CDialog CBCGPDialog
定義:
CBCGPOutlookBar m_wndOutlookBar; CBCGPOutlookBarPane m_wndPane1; CBCGPOutlookBarPane m_wndPane2; CMyMenuBar m_wndMenuBar; CBCGPCaptionBar m_wndCaptionBar; CBCGPToolBar m_wndToolBar; CBCGPStatusBar m_wndStatusBar; CBitmap m_bmpCaption; CCmdFrame* m_pMenuFrame;
Cpp文件
OnInitDialog() // Create Outlook Bar: DWORD dwStyle = WS_CAPTION | WS_CHILD | WS_VISIBLE | CBRS_ALIGN_LEFT; DWORD dwBCGStyle = 0; m_wndOutlookBar.Create (_T( "Shortcuts"), this, CRect (0, 0, 100, 100), AFX_IDW_TOOLBAR, dwStyle, dwBCGStyle); m_wndOutlookBar.EnableGripper (TRUE); m_wndOutlookBar.SetBarStyle (CBRS_ALIGN_LEFT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_wndOutlookBar.EnableSetCaptionTextToTabName (FALSE); m_wndPane1.Create (&m_wndOutlookBar, dwDefaultToolbarStyle, 1); m_wndPane1.SetWindowText (_T("Page 1")); m_wndOutlookBar.AddTab ( &m_wndPane1); m_wndPane1.EnableTextLabels (TRUE); m_wndPane1.SetOwner (this); m_wndPane2.Create (&m_wndOutlookBar, dwDefaultToolbarStyle, 1); m_wndPane2.SetWindowText (_T("Page 2")); m_wndOutlookBar.AddTab ( &m_wndPane2); m_wndPane2.EnableTextLabels (TRUE); m_wndPane2.SetOwner (this); // Add some shortcuts: m_wndPane1.AddButton (IDB_SHORTCUT1, "Shortcut 1", ID_SHORTCUT_1); m_wndPane1.AddButton (IDB_SHORTCUT2, "Shortcut 2", ID_SHORTCUT_2); m_wndPane2.AddButton (IDB_SHORTCUT3, "Shortcut 3", ID_SHORTCUT_3); m_wndPane2.AddButton (IDB_SHORTCUT4, "Shortcut 4", ID_SHORTCUT_4); CRect rectClient; GetClientRect (rectClient); // 在m_wndOutlookBarLocation所占位創建m_wndOutlookBar: CRect rectOutlookBar; m_wndOutlookBarLocation.GetWindowRect ( &rectOutlookBar); ScreenToClient ( &rectOutlookBar); m_wndOutlookBar.SetWindowPos (&wndTop, rectOutlookBar.left, rectOutlookBar.top, rectOutlookBar.Width (), rectClient.Height () - 2 * rectOutlookBar.top, SWP_NOACTIVATE); // Create menu bar: m_wndMenuBar.Create (this); CMenu menu; menu.LoadMenu (IDR_MAINFRAME); m_wndMenuBar.CreateFromMenu (menu.GetSafeHmenu (), TRUE, TRUE); m_wndMenuBar.SetBarStyle ( m_wndMenuBar.GetBarStyle () & ~(CBRS_GRIPPER | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT)); // Set menu bar position and size: CRect rectMenuBar; m_wndMenuBarLocation.GetWindowRect ( &rectMenuBar); ScreenToClient ( &rectMenuBar); m_wndMenuBar.SetWindowPos (&wndTop, rectMenuBar.left, rectMenuBar.top, rectMenuBar.Width (), rectMenuBar.Height (), SWP_NOACTIVATE); m_pMenuFrame = new CCmdFrame (this); m_pMenuFrame->Create (NULL, _T("")); m_pMenuFrame- >ShowWindow (SW_HIDE); m_pMenuFrame- >SetMenuBar (&m_wndMenuBar); m_wndMenuBar.SetOwner (m_pMenuFrame);//設定m_wndMenuBar的Owner為m_pMenuFrame BCGCBProSetTopLevelFrame (m_pMenuFrame); // Create caption bar: m_wndCaptionBar.Create (WS_CHILD | WS_VISIBLE, this, (UINT)-1); m_wndCaptionBar.SetText (_T( "Caption"), CBCGPCaptionBar::ALIGN_LEFT); m_wndCaptionBar.SetFlatBorder (); // Load caption image: m_bmpCaption.LoadBitmap (IDB_CAPTION); m_wndCaptionBar.SetBitmap ((HBITMAP) m_bmpCaption.GetSafeHandle (), RGB (255, 0, 255)); m_wndCaptionBar.SetBarStyle ( m_wndCaptionBar.GetBarStyle () & ~(CBRS_GRIPPER | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT)); // Set caption bar position and size: CRect rectCaptionBar; m_wndCaptionLocation.GetWindowRect ( &rectCaptionBar); ScreenToClient ( &rectCaptionBar); m_wndCaptionBar.SetWindowPos (&wndTop, rectCaptionBar.left, rectCaptionBar.top, rectCaptionBar.Width (), rectCaptionBar.Height (), SWP_NOACTIVATE); // Create toolbar: m_wndToolBar.Create (this); m_wndToolBar.LoadToolBar (IDR_MAINFRAME, 0, 0, TRUE ); m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY); m_wndToolBar.SetBarStyle ( m_wndToolBar.GetBarStyle () & ~(CBRS_GRIPPER | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT)); CSize sizeToolBar = m_wndToolBar.CalcFixedLayout (FALSE, TRUE); // Set ToolBar position and size: CRect rectToolBar; m_wndToolbarLocation.GetWindowRect ( &rectToolBar); ScreenToClient ( &rectToolBar); m_wndToolBar.SetWindowPos (&wndTop, rectToolBar.left, rectToolBar.top, sizeToolBar.cx, sizeToolBar.cy, SWP_NOACTIVATE); m_wndToolBar.SetOwner (this); // 指示m_wndToolBar的消息全部由對話框處理 m_wndToolBar.SetRouteCommandsViaFrame (FALSE); // Create status bar: m_wndStatusBar.Create(this); m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); // Set status bar position and size: CRect rectStatusBar; m_wndStatusBarLocation.GetWindowRect ( &rectStatusBar); ScreenToClient ( &rectStatusBar); m_wndStatusBar.SetWindowPos (&wndTop, rectStatusBar.left, rectStatusBar.top, rectStatusBar.Width (), rectStatusBar.Height (), SWP_NOACTIVATE); m_wndStatusBar.SetWindowText ("Test"); //消息處理 void CDlgBarsDlg::OnEditPaste() { MessageBox ( "OnEditPaste"); } //狀態更新 void CDlgBarsDlg::OnUpdateEditPaste(CCmdUI* pCmdUI) { pCmdUI- >SetCheck (); } LRESULT CDlgBarsDlg::OnKickIdle(WPARAM, LPARAM) { m_wndToolBar.OnUpdateCmdUI ((CFrameWnd*) this, TRUE); return 0; }
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園