彩票走势图

BCGControlBar入门使用手册(三):在对话框中使用菜单、工具栏

原创|其它|编辑:郝浩|2012-09-21 11:35:02.000|阅读 3627 次

概述:本文主要介绍在使用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@pclwef.cn

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP