Ribbon界面开发总结

发布时间:2025-12-09 17:23:17 浏览次数:4



IconWorkShop使用总结

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

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

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

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

接下来就可以选择图像带中图像标号,然后把图标库中的图像拖拽到图像编辑区中既可以,然后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函数参数中添加第7、8参数: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按钮,为该按钮添加事件处理程序,消息类型:COMMAND、UPDATE_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

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

option属性取值ES_HCENTER、ES_VCENTER、0、ES_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 ?

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

  • #include "BtnST.h"

    #include "ShadeButtonST.h"

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

  • 为对话框类添加CShadeButtonST的变量

  •     //添加3个变量

        CShadeButtonST m_btnButtons[3];

  • 在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

    需要做网站?需要网络推广?欢迎咨询客户经理 13272073477