VC学习:拥有Office XP风格的界面

未AKZE404jl

未AKZE404jl

2016-02-19 14:28

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的VC学习:拥有Office XP风格的界面教程,一起来看看吧!超容易上手~

  随着Windows XP和Office XP的推出,兼具华美和清爽气质的Office XP界面风格也逐渐取代了Windows经典界面风格而成为了当前应用程序的流行“时装”,因而如何使自己的应用程序拥有Office XP风格的界面也成为了广大程序员感兴趣的问题。为此法国程序员Jean-Michel LE FOL针对于Visual C++编写了CMenuXP类,使用CMenuXP类就可以轻松使自己的应用程序拥有Office XP风格的界面。下面我就以详细介绍一下使用CMenuXP的步骤。
 
  首先新建一个名叫“SDIXP”的单文档的MFC应用程序。在我们能使用CMenuXP之前,必须进行一下几步操作:

  1. 将CMenuXP的源文件和头文件所在的文件夹(一般放在名叫“Tools”)放到SDIXP源文件的目录下。

  2. 将Visual C++切换到“文件视图(FileView)”,加入CMenuXP的源文件和头文件。具体可以这样进行:在FileView的树状目录下,展开SDI files,在Source Files目录上点击右键,创建新目录(“New Folder…”),不妨取名叫“Tools”,再在Tools目录上点击右键,选择加入文件(“Add Files to Folder…”),将Tools文件夹下的所有源文件(*.cpp)全部加进来。同理,在文件视图的Header Files目录下新建一个叫做“Tool Headers”,再将Tools文件夹下的所有头文件(*.h)全部加到Tool Headers目录里。

  3. (1)在控制菜单的类的头文件(对于SDI程序通常是MainFrm.h)里加入所需要的CMenuXP类的头文件名:

  #include "Tools/MenuXP.h"
  #include "Tools/ToolBarXP.h"
  #include "Tools/StatusBarXP.h"
  #include "Tools/ComboBoxXP.h"
  再在MainFrm.h里加入下面的宏:

  DECLARE_MENUXP()
  上述语句可以加在CMainFrame类声明里的宏定义“DECLARE_MESSAGE_MAP()”的后面。

  (2)在控制菜单的类的源文件(MainFrm.cpp)里加入:

  IMPLEMENT_MENUXP(类名, 基类名);

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

对于SDI工程就是

  IMPLEMENT_MENUXP(CMainFrame, CFrameWnd);
  上述语句加在CMainFrame开头的“IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)”后面。

  (3)接着继续在消息映射里如下加入:

  BEGIN_MESSAGE_MAP(className, baseClass)
  // ...
  ON_MENUXP_MESSAGES() //加入这一行
  END_MESSAGE_MAP()


  (4)在继承于CWinApp的类(这里就是CSDIXPApp)中的InitInstance()函数里加入:
 
  CMenuXP::InitializeHook();
  可以加在“AfxEnableControlContainer();”语句后面。

  然后再为CSDIXPApp类重载ExitInstance()函数,可以在“类视图(ClassView)”里点右键加入。再在ExitInstance()函数里加入:

  CMenuXP::UninitializeHook();

  以上步骤做完之后可以按F7编译一下,如果一切没有问题我们就可以开始使用CMenuXP来美化我们的菜单和工具栏了。

  首先,我们来将菜单和菜单项XP化。这很简单,只要在CMainFrame:: OnCreate()函数里加入:

  CMenuXP::UpdateMenuBar(this);
  CMenuXP::SetXPLookNFeel(this);
  就OK了。现在你编译运行一下,看看你的程序菜单是不是改头换面了?

如果你想为自己菜单项定制图标,我们可以用CMenuXP::SetMenuItemImage (UNIT nID, HIMAGELIST hImgList, int nIndex)函数来实现。为此,我们新建一个菜单“水果”和菜单项“苹果”(ID设置为ID_MENUITEM_APPLE),打开ClassWizard为ID_MENUITEM_APPLE添加消息处理函数OnMenuitemApple()。然后再导入一个位图资源“APPLE.bmp”,其ID设置为IDB_APPLE。

  接着我们为CMainFrame添加CImageList类型的成员变量m_imgList,再在CMainFrame:: OnCreate()函数的“CMenuXP::SetXPLookNFeel (this);”后面加入:

  m_imgList.Create(IDB_APPLE, 0, 0, RGB(192,192,192));
  CMenuXP::SetMenuItemImage(ID_MENUITEM_APPLE, m_imgList, 0);
  其中m_imgList.Create()函数中的第2,3个参数是位图文件的图像拷贝的左上角坐标,最后一个参数是图像的背景色。建议使用16×16的位图。SetMenuItemImage()函数的最后一个参数指的是m_imgList的中元素的索引,这里因为m_imgList.只包含一个位图,故取零。编译后运行,看看“水果|苹果”菜单项前面是不是多了一个苹果的图标?

  下面我们在将使工具栏和状态栏XP化,这个更加easy了。只要将CMainFrame类声明中的

  CStatusBar m_wndStatusBar;
  CToolBar m_wndToolBar;
  变成

  CStatusBarXP m_wndStatusBar;
  CToolBarXP m_wndToolBar;
  就搞定了!不信,你编译运行一下看看,^_*

  CMenuXP还可以将按钮和下拉列表框变成Office XP风格的。为此我们新建一个对话框IDD_APPLE。OK和Cancel按钮保持不动,我们只增添一个下拉列表框控件IDC_COMBO1。然后按Ctrl+W打开ClassWizard为该对话框新建一个CAppleDlg类。再在ClassWizard中的Member Variable里为IDC_COMBO1添加Control类型的变量m_cmbx1。接着为CAppleDlg重载OnInitDialog()用以初始化控件:

  BOOL CAppleDlg::OnInitDialog()
  {
  CDialog::OnInitDialog();
  m_cmbx1.AddString("红苹果");

  m_cmbx1.AddString("青苹果");
  return TRUE;
  }
  然后在“苹果”菜单项的消息处理函数中使苹果对话框弹出:

  void CMainFrame::OnMenuitemApple()
  {
  // TODO: Add your command handler code here
  CAppleDlg dialog;
  dialog.DoModal();
  }
  如果这时编译运行,就会看到打开“水果|苹果”菜单项后弹出一个对话框,但上面的控件还不是Office XP风格的,下面我们就着手使其XP化,其实这同样也是很easy的!

  先在AppleDlg.h文件中包含"Tools/ComboBoxXP.h"和"Tools/ButtonXP.h",再找到定义m_cmbx1的位置,将CComboBox m_cmbx1;变成CComboBoxXP m_cmbx1;

  这样下拉列表框就有XP风格了,不信你编译运行试试。关于OK和Cancel按钮就稍微特殊一点,因为它们是直接用IDOK和IDCANCEL标识的默认按钮,但为了使它们XP化,我们还是得为这两个按钮添加控制变量。因此,在CAppleDlg类的声明中添加:

  CButtonXP m_btnOK;
  CButtonXP m_btnCancel;
  再在CAppleDlg::DoDataExchange()函数中添加数据交换:

  DDX_Control(pDX, IDOK, m_btnOK);
  DDX_Control(pDX, IDCANCEL, m_btnCancel);
  这样,OK和Cancel按钮也都XP化了。大家编译运行一下,看看效果怎么样。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  总之,使用Jean-Michel LE FOL的CMenuXP给用Visual C++开发的应用程序换上Office XP风格的界面还是很不错的,操作起来也比较简便。唯一不足的就是其他许多控件,如文本框等还是没有Office XP风格,这就期待着

展开更多 50%)
分享

猜你喜欢

VC学习:拥有Office XP风格的界面

编程语言 网络编程
VC学习:拥有Office XP风格的界面

VC学习笔记之一:怎样实现XP风格按钮

C语言教程 C语言函数
VC学习笔记之一:怎样实现XP风格按钮

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VC编程实现IE风格的界面

编程语言 网络编程
VC编程实现IE风格的界面

在VC6中编写可在XP中显示XP风格界面的程序

编程语言 网络编程
在VC6中编写可在XP中显示XP风格界面的程序

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

WPS Office 2024界面风格任我选!

电脑入门
WPS Office 2024界面风格任我选!

WPS Office 2024界面风格如何切换

wps教程 wps office教程
WPS Office 2024界面风格如何切换

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何卸载优化大师

如何卸载优化大师

开发工具大比拚之Visual C++ vs. Delphi(一)

开发工具大比拚之Visual C++ vs. Delphi(一)
下拉加载更多内容 ↓