菜单侧边栏制作简单






3.08/5 (20投票s)
一个具有侧边栏和颜色支持的菜单类
引言
这是自定义绘制弹出菜单的最简单实现之一,具有渐变侧边栏文本和其他颜色选项。名为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;
}
}
就这样。尽情使用和修改这个类吧。欢迎提出任何意见。玩得开心!