您的位置:首页 > 其它

vc2008 office2007特性包的使用心得

2010-07-10 10:26 316 查看
     vc2008的office2007特性包在界面的效果上让人耳目一新,于是我尝试用了一下,发现这家伙俨然就是一个半成品,一些函数的说明居然是This topic is under construction,bug成堆,文档又少。据说在vc2010上有所改进。

1、添加工具栏类别

CMFCRibbonCategory* pCategoryHome = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITELARGE, IDB_WRITELARGE);

2、创建面板

CMFCRibbonPanel* pPanelADDUSER = pCategoryHome->AddPanel(L"XXX", m_PanelImages.ExtractIcon(7));

3、创建面板上的菜单

CMFCRibbonButton* pBtnADDUSER = new CMFCRibbonButton(ID_ADDUSER, strTemp,1, 1);
 pPanelADDUSER->Add(pBtnADDUSER);

4、状态栏中添加时间

在MainFrm的oncreate()中添加以下

CTime time;
 time=CTime::GetCurrentTime();//得到当前时间
 CString s=time.Format("%H:%M:%S");//转换时间格式
 CMFCRibbonBaseElement* m_StatusBarTime = new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE2, s, TRUE);

m_wndStatusBar.AddExtendedElement(m_StatusBarTime, L"时间栏");

SetTimer(1,1000,NULL);

设置一个定时器

在ontimer中添加

 CTime time;
 time=CTime::GetCurrentTime();//得到当前时间
 CString s=time.Format("%H:%M:%S");//转换时间格式
 m_StatusBarTime->SetText(s);
 m_StatusBarTime->SetKeys(_T("p"));
 m_StatusBarTime->SetToolTipText(_T("this is a pane"));
 Invalidate();//这个刷新一定要加,不然时间不会自动刷新,这个也是bug

 

5、Formview中GroupBox的显示bug解决办法

GroupBox的Transparent属性不要设成透明;

重载OnCtlColor,添加代码:

CRect rect;
 CWnd* pWndStatic=GetDlgItem(IDC_STATIC_GROUP);
 if(pWnd->GetDlgCtrlID()==IDC_STATIC_GROUP && nCtlColor== CTLCOLOR_STATIC)
 {
  COLORREF backColor = RGB(236, 233, 216);//这个颜色为Formview默认的面板颜色
  pWndStatic->GetClientRect(&rect);
  pDC->FillSolidRect(&rect,backColor);
  pDC->SetBkColor(backColor);

  return CreateSolidBrush(backColor);//创建背景刷子
 }

这个时候如果发现groupbox还是不能正常显示,就像groupbox的Tab键顺序改成1。

 

6、关于菜单的透明图片制作

图片是BMP的32位RGBA格式的,普通图片是RGB格式,会显示有黑边,而不是透明的。可以用PS制作,在通道里主要A的颜色,黑色表示透明,灰色代表半透明,白色代表不透明

 

 

个人心得,水平有限,欢迎指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息