2024年3月19日发(作者:)

维普资讯

2006年6月 电 脑 学 习 第3期 

VC 6.0开发制作二则 

李志伟 任树海” 陈桦”’ 

摘 要 阐述了在VC6.0的开发环境下。制作彩色的弹出式菜单及桌面右下角托盘图标的方法。 

关键词 VC6.0 弹出式菜单(Pop_Menu) 构造函数 视图 托盘 

中图分类号TP312VC 文献标识码 B 文章编号:1002-2422(2006)03-0056-02 

Discussion of Two Exploration Examples in VC6.0 

Li Zhiwei Ren Shuhai Chen Hua 

Abstract The paper mainly de8cribes how to make color Pop

_

Menu and the tray on the right comer of the desktop under 

hte developing environment of VC6.0. 

Keyword VC6.0 Pop

_

Menu Construct Function ListView Tray 

别具一格的程序外观足以影响用户的选择。拥有友好 的予类,并且拥有自绘能力。它可向你提供以下功能: 

而富于个性的用户界面的软件往往具有更强的功能。本文 设置字体颜色。 

详细地介绍了用VC设计制作彩色弹出菜单及桌面右下角 

设置高亮度颜色。 

托盘图标的方法。 

设置高亮度时的风格。 

1彩色弹出菜单的制作方法 

设置选中时和在普通状态1-的菜单显示的图标。 

设置显示图标大小。 

菜单是用户界面中常用的控件之一,普通的菜单往往 

在CCustomMenu中定义了结构MENUDATA,你必须根 

不能满足用户的需求,制作彩色的菜单对程序员非常有用。 

据你的需要填充该结构,并且在增加菜单时提供该结构的 

1.1彩色弹出菜单关键代码实现 

指针(调用AppendMenu,InsertMenu)。下面是一个例予,在 

这里提供一个C++类(CCustomMenu),该类是CMenu 

音乐的导入是Flash中制作MTv的焦点,而词曲同步 显示的播放整首歌曲时间值4:18秒,即播放整首曲子所需 

更是焦点中的难点。许多制作者往往采用较死板的办法: 时间为258秒。根据公式 :帧数=12.0 秒数,整首歌的帧 

听、校对、再听、再校对。在听的时候,记下每句歌词开始和 数为3096(12.0*258=3096)。同样可计算出第一句歌词起 

结束时的帧数,这样既耗费大量时间又不准确。笔者在制作 

始帧为276(12.0*23=276),第二句歌词起始帧为336(12. 

初期也是这样,经过一段时间的摸索,找到了一种科学的办 

0*28=336),以此类推得出每句歌词的起始帧数。时间轴上 

法,现简述如下: 

显示的是:276、12.Ofps、22.9秒其中的22.9秒与公式中 

3.1确定每句歌词的起始时间 

的23秒只差0.1秒,误差0.1秒在欣赏MTV时完全不会受 

借助歌词编辑软件LyricsMate Lyrics Editor和MP3播 影响。可见这种实现词曲同步的方法是一种科学的方法。 

放软件WINAMP(网上都可下载到),以歌曲《水木年华》 

4结束语 

为例。打开LyricsMate Lyrics Editor界面并把歌词输入白色 

区域,每句一行。 由于LyricsMate软件是配合WINAMP 

基于FLASH成功制作MTV,音乐的导入是前提,词曲 

的,因此要同时启动WINAMP,找到歌曲并播放。把光标放 

同步是制作MTV的难点。这两项关键技术解决后,加上创 

到歌词的句前,在此句歌词播放出现的时候,选择 标签 的 

作者制作和编排动画的专业水平,一部好的MTV作品就可 

添加时间标签 (或按快捷键F5)。这样LyricsMate软件 

以完美实现。 

就会在每句歌词前添上该句的播出时间(以秒数显示),你 

参考文献 

添一句后,光标自动条到下一行,方便、准确且容易操作。 

[1]“佚名”.Flash动漫大师[M].北京:人民交通出版 

3.2确定FLASH中每句歌词的起始帧 

社,2005. 

确定了每句歌词的播放时间后,就很容易计算出在 

[2]“佚名”.、FLASH MX教程[M].北京:中国铁道出版 

Flash时间轴上每句歌词对应的时间帧数。根据WINAMP所 

社,2003. 

}李志伟北京市经济管理干部学院信息系讲师(100102),研究方向:计算机应用 收稿日期:2006-02-24 

}・任树海黑龙江省齐齐哈尔市江岸造纸厂助理工程师(160010),研究方向:计算机应用 

・・・陈桦哈尔滨环保制氧设备工业公司助理工程师(150000),研究方向:计算机应用 

・ 56 ・ 

维普资讯

CMylistView中点击鼠标右键弹出彩色的菜单,CMylistVi— 

ew是ClistViewEx类的子类。 

1、在CMylistView的头文件中定义: 

CCustomMenu pCustomMenu 

MENUDATA menuData[4]; 

2、在CMylistView的构造函数中添加如F代码: 

∥调用CreateMenu()设置弹出菜单有关参数: 

_

eustomlNMenu.CreatePopupMenu(): 

_

custondNMenu.SetleonSize(25.25): 

m eustomINMenu.setHi gI1tstyle(Norma1): 

m_customINMenu.SetTextColor(RGB(o’O,O)); 

m_eustomlNMenu.SetBackColor(RGB(143,167,20口)): 

_

customlNMenu.SetHighlightColor(RGB(O,0。127)); 

暴加弹出菜单的功能项 

latrepy(men ̄NData[o3.menuText, 添加 ); 

menulNData[o3.menuleonNormal=ID ADD.

_

[N 

m custondNMenu.AppendMenu(MF OWNERDRAW,3,(LPCTSTR) 

men ̄NDma[o3.menuText): 

lstrcpy(menuINData[1].menuText, 修改 ); 

menuINData[1].menulconNormal=ID MODIFY_IN: 

m_customlNMenu.AppendMenu(MF_OWNERDRAW,3。(LPCT- 

STR)menuINData[I].menuText); 

Istrcpy(menuINData[23.menuText. 删除 ); 

men ̄NData[2].menulconNormal=[D DELONE

IN: 

_

enu(MF_OWNERDRAW,3,(LPCT- 

STR)menuINData[2].menuText): 

Istrcpy(menuINData[3].menuText, 删除全部 ): 

menuINData[3].menulconNormal=ID—DEI。AIL IN; 

(MF_OWNERDRAW,3。(LPCT- 

s1R)menulNData[3].menuText); 

3、在CMyfistView类右键消息响应函数中加如下代码: 

CPoint point; 

GetCursorPos(&point); 

点击鼠标右键弹出彩色的菜单 

_

customlNMenu.TrackPopupMenu( 

TPM LEkTBU'Iq'ON, 

point.x, 

point.Y, 

pFrame, 

NULL); 

2托盘的制作方法 

Windows95,9 ̄000中,任务栏的右边(托盘)常驻几 

个图标,如输入法切换图标、音量控制图标等,此外我们还 

经常遇到拥有托盘图标的软件,如金山词霸、有实时监测功 

能的杀毒软件等。这些软件在后台运行,通常不占用太多的 

屏幕资源,只在通知栏上放一个小小的标志。必要时我们可 

以通过用鼠标点击图标对其进行菜单操作或激活其主窗 

口。有时我们自己编写的程序也希望有类似的效果。 

2.1 NOTIFYICONDATA结构 

N佣F、rIcONDATA结构包含了系统用来处理托盘图 

标的信息,它包括选择的图标、回调消息、提示消息、图标对 

应的窗口等内容。其定义为: 

typedef struct

NOTIFYICONDATA( 

DWORD dwsize;∥以字节为单位的这个结构的大小 

UINT ulD://7 ̄用程序定义的该图标的lD号 

UINT uFlags;∥设置该图标的属性 

HWND hWnd:// ̄收托盘图标通知消息的窗口句柄 

UINT uCaUbackMessage:// ̄息ID号,此消息传递给hWnd 

HICON Meon: /俑标的句柄 

char szTop[643,/At标停留在图标上显示的提示信息 

)NOTIFYICONDATA,*PNOTIFYICONDATA: 

该结构中,成员una 可以使下列之一或组合: 

NIF J【CON 设置成员hIcon有效 

NIF MESSAGE 设置成员uCallbaekMessage有效 

NIF TIP 设置成员szTop有效 

2.2 Shell

_

Notifylcon函数 

全局函数SheU

_

Notifylcon()用于在托盘上增加、删除 

或修改图标。其原型为: 

WINSHELLAPI BOOL WINAPI 

ShelLNotifyIcon(DWORD dwMessage,PNOTIFY[CONDATA 

pnid); 

Pnid是上面的NOTIFYICONDATA结构的指针: 

dwMessage是被传递的消息,可以是以下消息之一: 

NIM ADD //增加图标 

NIM

_

DELETE //删除图标 

NIM

_

MODIFY //修改图标 

3结 论 

由此可看出,通过以上代码,可以简单方便的制作彩色 

弹出菜单及托盘图标。以上为作者在实际工作中积累的一 

点儿经验。在VC++6.0,Windows98/2000 Professional下调试 

通过,仅供参考。 

参考文献 

[1]李博轩等著.Visual C++图形用户界面开发指南.北 

京:清华大学出版社.2000一l1. 

[2][美]David J.Kruglinski。Scot Wingo。George Shepherd 

著.Visual c++6.0技术内幕.北京:希望电子出版社. 

・57・