原創|其它|編輯:郝浩|2012-09-21 11:35:02.000|閱讀 3710 次
概述:本文主要介紹在使用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@ke049m.cn
文章轉載自:博客園