Ribbon界面开发总结



IconWorkShop使用总结

IconWorkShop是一款专业的图标制作软件,转换工具。可以导入现有的图像自动生成图标。支持的图片格式:PSDPNGBMPJPEGGIF等,是唯一一款可以为工具栏创建和编辑图像条的图标编辑器,可以编辑图像条,在此基础上通过简单的拖放图像创建新的图像条。

在创建项目选项下选择 适用于工具栏的图像带:

填写项目名称,设置图像大小即可,点击确定:

此时,图像带的图标为空的,那么如何添加图像呢,可以在管理器下新建一个文件夹,如 图标库,然后右键 图标库 选择 导入 菜单项, 选择要导入的图像即可:

接下来就可以选择图像带中图像标号,然后把图标库中的图像拖拽到图像编辑区中既可以,然后CRL+S保存起来

Ribbon界面工程

使用VS2010新建一个MFC工程:

应用程序选择单文档,项目类型选择office,一直下一步,直到如下界面:

去掉导航窗口,保留标题栏,基于ribbon的界面工程就建好了。

接下来是Ribbon功能区控件添加,在工具箱里有类别、面板、按钮等控件可以使用

问题1:如何屏蔽ribbon功能区的右键弹出菜单功能?

       CMainFrame类添加重写函数OnShowPopupMenu

BOOLCMainFrame::OnShowPopupMenu(CMFCPopupMenu* pMenuPopup)

{

    // TODO: ¨²ä?¬¨ª¨®Á¡§®?䨲?¨ª/¨°Ì¡Â®?¨´¤¨¤

    return 0;

    //returnCFrameWndEx::OnShowPopupMenu(pMenuPopup);

}

注释掉 //return CFrameWndEx::OnShowPopupMenu(pMenuPopup);即可

问题2:如何去掉CDockablePane停靠窗口的关闭按钮?

       CDockablePane变量的Create函数参数中添加第78参数:AFX_CBRS_REGULAR_TABS,AFX_CBRS_RESIZE

    if(!m_dockablePane.Create(_T("面板"), this,CRect(0,0,200, 200), TRUE, 1001, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN

        |CBRS_LEFT|CBRS_FLOAT_MULTI,AFX_CBRS_REGULAR_TABS, AFX_CBRS_RESIZE))

    {

        TRACE0("Failedto create LeftPane\n");

    }

 

问题3:如何设置CDockablePane窗口左边停靠?

    EnableDocking(CBRS_ALIGN_ANY);

    EnableAutoHidePanes(CBRS_ALIGN_RIGHT);

 

    if(!m_dockablePane.Create(_T("?ã?"), this,CRect(0,0,200, 200), TRUE, 1001,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN

        |CBRS_LEFT|CBRS_FLOAT_MULTI))

    {

        TRACE0("Failedto create LeftPane\n");

    }

    m_dockablePane.EnableDocking(CBRS_ALIGN_LEFT);

    DockPane(&m_dockablePane);

问题4:如何使用复选框控制停靠窗口的显示与隐藏?

新建一个checkbox按钮,为该按钮添加事件处理程序,消息类型:COMMANDUPDATE_COMMAND_UI

COMMAND消息响应菜单命令,UPDATE_COMMAND_UI更新界面元素,用以启用或禁用菜单项或命令按钮。

问题5:如何修改窗口的标题?

方法1,在资源视图Sring Table下的String Table中找到IDR_MAINFRAME,修改第一个\n前的字符串(它显示的是-之后的值),在第一个\n后添加一个字符串(它显示的是-之前的值)

方法2,在CXXApp类的InitInstance函数中添加如下代码:
m_pMainWnd->SetWindowText("Ribbon界面测试");

EASYSIZE代码使用

EASYSIZE代码主要用于VC中排版控件,下面主要说明EASYSIZE宏:

BEGIN_EASYSIZE_MAP(which_dialog)

       EASYSIZE(control_id,left, top, right, bottom, option)

END_EASYSIZE_MAP

各部分参数说明如下:

which_dialog指示使用EASYSIZE的对话框

control_id是控件ID

lefttoprightbottom为左上右下的属性,一般可以设:ES_BORDERES_KEEPSIZEcontrol_idES_BORDER指保持距离对话框边框的距离不变,ES_KEEPSIZE指控件的宽度和高度保持不变,left/right只能设置其中一个为ES_KEEPSIZEtop/bottom也只能设置其中一个为ES_KEEPSIZEcontrol_id表示当前控件距离control_id的距离不变

option属性取值ES_HCENTERES_VCENTER0ES_HCENTER|ES_VCENTER

ES_HCENTER表示水平居中

ES_VCENTER表示垂直居中

0表示默认,不作居中操作

EASYSIZE如何添加在代码里?

1步:在对话框的头文件里包含EASYSIZE的头文件#include "easysize.h"

2步:在对话框类的声明中添加  DECLARE_EASYSIZE

3步: 在对话框源文件中的OnInitDialog()中添加 INIT_EASYSIZE;

4步: 添加对话框的WM_SIZE消息响应函数OnSize(),并在OnSize函数中添加:

        UPDATE_EASYSIZE;

5步: 在对话框源文件中添加映射宏:

BEGIN_EASYSIZE_MAP(CDlgThree)

 

  EASYSIZE(IDC_EDIT1,     ES_BORDER,  ES_BORDER,ES_BORDER,   ES_BORDER,  0)

  EASYSIZE(IDOK,              ES_BORDER,IDC_EDIT1,ES_KEEPSIZE,    ES_BORDER,  0)

  EASYSIZE(IDCANCEL,          ES_KEEPSIZE,IDC_EDIT1,ES_BORDER,    ES_BORDER,  0)

 

END_EASYSIZE_MAP

对话框如何更改背景颜色?

方法1:对话框添加WM_PANIT消息,在OnPaint函数中添加如下代码:

    CRect rect;

    GetClientRect(&rect);

    dc.FillSolidRect(rect.left,rect.top,rect.Width(),rect.Height(), RGB(200,180,144));

方法2:对话框添加WM_CTLCOLOR消息,在OnCtlColor函数中添加如下代码:

    staticCBrush gBr;

    static bool isInited = false;

    if(!isInited)

    {

        CBitmap bitmap;

        bitmap.LoadBitmap(IDB_BITMAP3);

        gBr.CreatePatternBrush(&bitmap);

        COLORREF clearColor = -1;

        bitmap.DeleteObject();

        isInited = true;

    }

    if(pWnd == this)

    {

        pDC->SetBkMode(TRANSPARENT);

        returngBr;

    }

方法2有缺陷,即窗口大小比图片大时,窗口背景出现了图片拼接现象,这时可以使用方法3的做法。

方法3:在OnPaint函数中添加如下代码:

    CBitmap bitmap;

    bitmap.LoadBitmap(IDB_BITMAP4);

    BITMAP bmpTemp;

    bitmap.GetBitmap(&bmpTemp);

 

    CDC dcCompatible;

    dcCompatible.CreateCompatibleDC(&dcCompatible);

    dcCompatible.SelectObject(&bitmap);

 

    CRect rect;

    GetClientRect(&rect);

    dc.FillRect(&rect, &CBrush(RGB(255,255,255)));

    dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible, 0, 0, bmpTemp.bmWidth, bmpTemp.bmHeight, SRCCOPY);

如何设置单文档窗体的最小界面大小?

当我们缩放窗口时,我们希望窗口有一个最小界面,界面小于这个值时,窗口不再变小,我们可以在CMainFrame类添加WM_GETMINMAXINFO消息,并在OnGetMinMaxInfo消息响应函数中添加如下代码:

voidCMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)

{

    if(lpMMI->ptMinTrackSize.x<= 1024)

    {

        lpMMI->ptMinTrackSize.x = 1024;

    }

    if(lpMMI->ptMinTrackSize.y<= 768)

    {

        lpMMI->ptMinTrackSize.y = 768;

    }

    CFrameWndEx::OnGetMinMaxInfo(lpMMI);

}

如何使用ShadeButtonST ?

  1. 在对话框头文件中添加包含文件

#include "BtnST.h"

#include "ShadeButtonST.h"

  1. 把如下文件拷贝到工程目录下,并在解决方案资源管理器中添加这些头文件与源文件。

  1. 为对话框类添加CShadeButtonST的变量

    //添加3个变量

    CShadeButtonST m_btnButtons[3];

  1. DoDataExchange函数中添加关联变量

void CDlgMain::DoDataExchange(CDataExchange*pDX)

{

    CDialogEx::DoDataExchange(pDX);

    DDX_Control(pDX,IDC_LIST1, m_listCtrl);

    DDX_Control(pDX,IDOK, m_btnButtons[0]);

    DDX_Control(pDX,IDC_BTN_TEST, m_btnButtons[1]);

    DDX_Control(pDX,IDCANCEL, m_btnButtons[2]);

}

5、在OnInitDialog函数中添加代码:

    m_btnButtons[0].SetShade(CShadeButtonST::SHS_SOFTBUMP,8,20,5,RGB(200,0,0));

    m_btnButtons[0].SetIcon(IDI_ICON1);

 

    m_btnButtons[1].SetShade(CShadeButtonST::SHS_SOFTBUMP);

    m_btnButtons[1].SetIcon(IDI_ICON3, (int)BTNST_AUTO_GRAY);

 

    m_btnButtons[2].SetShade(CShadeButtonST::SHS_SOFTBUMP);

    m_btnButtons[2].SetIcon(IDI_ICON2, (int)BTNST_AUTO_GRAY);

6、注意导入ICO资源,编译运行就可以实现ShadeButton

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

feng_blog6688

只需一个赞,谢谢你的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值