使用VS2010创建一个带Ribbon样式的单文档程序
项目类型为:Office
在资源中,可对Ribbon进行编辑
在资源中,可对Ribbon进行编辑
Ribbon控件中,按右键,添加事件处理
==============================================
图标的添加:
使用 Axialis IconWorkshop
添加一个: 来自数个文件的图像带
添加数个PNG图像(推荐PNG图像,带Alpha透明)
最后保存成BMP格式
在VS资源中,导入BMP,如下: IDB_BMP_ICO IDB_BMP_ICO2 分别用于大图标与小图标
在面板的属性中,分别指定此面板需要采用的LargeImages 与 SmallImages
在面板中的按钮属性中,添加图标
运行结果:
主界面:
============================================
复选框的按钮,需要添加一个 BOOL m_bCheck;
在按钮中,对其进行控件,并在Ribbon更新的时候,对复选框进行勾选或取消勾选
void CMainFrame::OnChkTest()
{
m_bCheck = !m_bCheck;
if (m_bCheck)
{
AfxMessageBox(_T("勾选"));
}
else
{
AfxMessageBox(_T("取消"));
}
}
void CMainFrame::OnUpdateChkTest(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_bCheck);
}
其他部分代码:
void CMainFrame::OnBtnTesta()
{
AfxMessageBox(_T("测试按钮A"));
}
void CMainFrame::OnChkTest()
{
m_bCheck = !m_bCheck;
if (m_bCheck)
{
AfxMessageBox(_T("勾选"));
}
else
{
AfxMessageBox(_T("取消"));
}
}
void CMainFrame::OnUpdateChkTest(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_bCheck);
}
void CMainFrame::OnEdtA()
{
// TODO: 在此添加命令处理程序代码
}
void CMainFrame::OnEdtB()
{
// TODO: 在此添加命令处理程序代码
}
void CMainFrame::OnBtnEditText()
{
CMFCRibbonEdit* pEditA = DYNAMIC_DOWNCAST(CMFCRibbonEdit, m_wndRibbonBar.FindByID(ID_EDT_A));
CMFCRibbonEdit* pEditB = DYNAMIC_DOWNCAST(CMFCRibbonEdit, m_wndRibbonBar.FindByID(ID_EDT_B));
CString strA;
strA = pEditA->GetEditText();
CString strB;
strB = pEditB->GetEditText();
AfxMessageBox(strA+_T(" - ")+strB);
CMFCRibbonButton* pBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_BTN_EDIT_TEXT));
}
void CMainFrame::OnBtnColor()
{
CMFCRibbonColorButton* pBtn = DYNAMIC_DOWNCAST(CMFCRibbonColorButton, m_wndRibbonBar.FindByID(ID_BTN_COLOR));
COLORREF color;
color = pBtn->GetColor();
BYTE r = GetRValue(color);
BYTE g = GetGValue(color);
BYTE b = GetBValue(color);
CString strColor;
strColor.Format(_T("颜色:R:%d-G:%d-B:%d"), r, g, b);
AfxMessageBox(strColor);
}
void CMainFrame::OnSpinNum()
{
// 怎么会运行两次呢
CMFCRibbonEdit* pEdit = DYNAMIC_DOWNCAST(CMFCRibbonEdit, m_wndRibbonBar.FindByID(ID_SPIN_NUM));
CString strGet;
strGet = pEdit->GetEditText();
AfxMessageBox(strGet);
}
void CMainFrame::OnCmbTest()
{
CMFCRibbonComboBox* pCmb = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, m_wndRibbonBar.FindByID(ID_CMB_TEST));
CString strGet;
strGet = pCmb->GetEditText();
AfxMessageBox(strGet);
}
源码下载