Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5327309
  • 博文数量: 671
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 7310
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-14 09:56
文章分类

全部博文(671)

文章存档

2011年(1)

2010年(2)

2009年(24)

2008年(271)

2007年(319)

2006年(54)

我的朋友

分类: C/C++

2008-08-26 23:15:00

Sample Image - TitleMenu.jpg

Introduction

I wanted to put a title on top of some popup menus, but I didn't like to use DISABLED|STRING as flags for a menu-item, as this doesn't prevent the mouse-over selection, and doesn't look nice. So I checked around and found CTMenu by Per Fikse on Code Guru, which I then build upon, to get what I wanted.

CTitleMenu is pretty simple to use. Include the source-files in your project, and where you use CMenu, use CTitleMenu instead. And don't forget to #include "TitleMenu.h" ofcourse.

Functions:

void AddMenuTitle(LPCTSTR lpszTitle);
This puts a MenuItem on first menu position, with the caption lpszTitle. If you don't use this, the menu will look just like a normal menu.
void SetColor(long cl) {clLeft=cl;};
This sets the background color, or left-side color in a gradient background.
Default: Standard Windows Active Caption color
void SetGradientColor(long cl);
This sets the right-side color in a gradient background. If this color is the same as the set background color, obviously no gradient will be drawn either.

NOTE: I'm loading the GradientFill function dynamically from msimg32.dll. If this load fails, for whatever reason, no gradient fill will be performed, but no crash should occur either.

Default: Standard Windows Gradient Active Caption color

void SetTextColor(long cl);
This sets the text color of the title.
Default: Standard Windows Captiontext color
void SetEdge(bool shown,UINT remove=0,UINT add=0);
This sets the visibility and style of the edge around the title. For an overview of the flag values, see ::DrawEdge help.
Default: no border (shown=false), and style BDR_SUNKENINNER
long GetColor();
long GetGradientColor();
long GetTextColor();
long GetEdge();
These functions will get you the current values.

Example:

CTitleMenu menu1;
menu1.CreatePopupMenu();
menu1.AddMenuTitle("Power Channels");
menu1.AppendMenu(MF_STRING | MF_ENABLED | MF_CHECKED, 20, "Right Peltier");
menu1.AppendMenu(MF_STRING | MF_ENABLED | MF_CHECKED, 20, "Left Peltier");
...

I haven't tested this very thoroughly, but the code isn't that complex. I didn't encounter any problems with it, so far. There is enough that could be improved upon, like bitmap background, it's own gradient-function, and more, but then I would have to write a much bigger article. ^_^

Still, if you'd like to see a feature in it, or have expanded upon it yourself, leave a reply.

History

3 Apr 2002 - updated downloads.

阅读(796) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~