第三章 In Command with Command Bars

 

          In Command with Command Bars

命令条控件就是一个工具条 , 它看起来像是菜单条 , 并且展开其子菜单可见相应子菜单项旁边有与之对应的工具条图标贴图 . 从头编写命令条是件很痛苦的事 , 如果你是 MFC 程序员 , Paul Dilascia 已经在 January 1998, MSJ (Give Your Applications the Hot New Interface Look with Cool Menu Buttons ). 为你做了这件事 , 同样的 , 如果你是 WTL 程序员 , 你需要做的仅仅是在 WM_CREATE 消息映射函数中实例化一个 CCommandBarCtrl 类对象而已 :

 

LRESULT CMainFrame::OnCreate(UINT, WPARAM, LPARAM, BOOL&)

{

    // m_CmdBar is of type CCommandBarCtrl, defined in AtlCtrlw.h

    HWND hWndCmdBar = m_CmdBar.Create(m_hWnd, rcDefault,

                                      0, ATL_SIMPLE_CMDBAR_PANE_STYLE);

 

    // Let command bar replace the current menu

    m_CmdBar.AttachMenu(GetMenu());

    m_CmdBar.LoadImages(IDR_MAINFRAME);

    SetMenu(NULL);

   

    // First create a simple toolbar

    HWND hWndToolBar = CreateSimpleToolBarCtrl(m_hWnd,

        IDR_MAINFRAME,FALSE,ATL_SIMPLE_TOOLBAR_PANE_STYLE);

   

    // Set m_hWndToolBar member

    CreateSimpleReBar(ATL_SIMPLE_REBAR_NOBORDER_STYLE);

   

    // Add a band to the rebar represented by m_hWndToolBar

    AddSimpleReBarBand(hWndCmdBar);

   

    // Add another band to the m_hWndToolBar rebar

    AddSimpleReBarBand(hWndToolBar, NULL, TRUE);

   

    // Create the usual statusbar

    CreateSimpleStatusBar();

    return 0;

}

 

WTL CCommandBarCtrl 类封装了命令条控件所有功能 , CMainFrame 拥有一个 CCommandBarCtrl 类对象的数据成员 m_CmdBar . WM_CREATE 消息映射函数中 , 我们先调用 CCommandBarCtrl::Create() , 并传递主框架窗口句柄作为其父窗口 . 然后 , 调用 CCommandBarCtrl::AttachMenu() 用命令条控件取代旧式的菜单条并关联到菜单资源 , CCommandBarCtrl::LoadImages() 装载工具条图标资源 , 命令条控件把工具条上所有的各位图资源映射到相应的菜单命令 ID . 由于命令条控件取代了菜单并接管了菜单命令 , 我们需要把旧式的菜单条丢弃 , 调用 SetMenu(NULL) 正是为此 . 接下来 , CreateSimpleToolBarCtrl() 利用工具条资源创建工具条控件 , CreateSimpleRebar() 创建一个复合控件 ( Rebar ), 通过 CFrameWindowImplBase::AddSimpleRebarBand() 把命令条和工具条设置为复合控件的两个区间 ( band ). Figure 5b 展示了具有命令条的 SDI 应用程序 , 可以看出上述代码是如何完成 UI 元素的绘制 .

 

                Figure 5b SDI Application with Command Bars

 

    A Frame with a View

To be continued···

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值