65.9K
CodeProject 正在变化。 阅读更多。
Home

菜单侧边栏制作简单

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.08/5 (20投票s)

2004年10月25日

CPOL

1分钟阅读

viewsIcon

112703

downloadIcon

2200

一个具有侧边栏和颜色支持的菜单类

Sample Image - SidebarMenu.jpg

引言

这是自定义绘制弹出菜单的最简单实现之一,具有渐变侧边栏文本和其他颜色选项。名为CSidebarMenu的类可以像普通的CMenu对象一样使用。重要的一点是,在添加菜单项时,应该提及MF_OWNERDRAW标志。

函数

   void SetSideBarText(LPCSTR text);
   void SetSideBarTextColor(COLORREF color); 
   void SetSideBarColor(COLORREF start, COLORREF end);
   void SetMenuBkgColor(COLORREF color);
   void SetHiLitColor(COLORREF color);
   void SetMenuTextColor(COLORREF color);
   void SetTextHiLitColor(COLORREF color);

上述函数的目的从函数名称本身就很清楚。函数“SetSideBarColor”接受两种颜色 - 一种用于渐变的起始颜色,另一种用于渐变的结束颜色。您不必使用所有上述函数。有一个默认实现,因此您可以像使用CMenu类一样使用这个类。

示例

步骤 1

在对话框的头文件中声明一个CSideBarMenu对象和一个菜单处理函数,例如

class CDemoDlg : public CDialog
{

public:
   ......

protected:
BOOL 
OnInitDialog();
void OnRButtonDown( UINT nFlags, CPoint point );
void MenuHandler(UINT id);
   ......

DECLARE_MESSAGE_MAP()

private:

  CSideBarMenu mnuSideBar;
  ......
}

第二步

在实现函数中,创建菜单,即

BOOL CDemoDlg::OnInitDialog()
{
 //Creating the menu
 mnuSideBar.CreatePopupMenu();
 mnuSideBar.AppendMenu(MF_STRING|MF_OWNERDRAW,10,"Item 1");
 mnuSideBar.AppendMenu(MF_SEPARATOR|MF_OWNERDRAW,0,"");
 mnuSideBar.AppendMenu(MF_STRING|MF_OWNERDRAW,11,"Item 2");
 mnuSideBar.AppendMenu(MF_SEPARATOR|MF_OWNERDRAW,0,"");
 mnuSideBar.AppendMenu(MF_STRING|MF_OWNERDRAW,12,"Item 3");
 return 1;
}

步骤 3

提供消息映射以处理右键单击鼠标事件和菜单事件

BEGIN_MESSAGE_MAP(CDemoDlg,CDialog)
ON_WM_RBUTTONDOWN()
ON_COMMAND_RANGE(10,12,MenuHandler)
......
END_MESSAGE_MAP()

步骤 4

如下实现鼠标处理程序和菜单选择处理程序

void CDemoDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
 ClientToScreen(&point);
 mnuSideBar.TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this,NULL);
 .....
}

void CDemoDlg::MenuHandler(UINT id)
{
 switch(id)
 {
  case 10:
   MessageBox("Item 1","SideBarMenu Demo");
   break;

  case 11:
   MessageBox("Item 2","SideBarMenu Demo");
   break;

  case 12:
   MessageBox("Item 3","SideBarMenu Demo");
   break;
 }
}

就这样。尽情使用和修改这个类吧。欢迎提出任何意见。玩得开心!

© . All rights reserved.