如何给托盘菜单加入图案?

大王派我去巡山 2005-07-18 01:21:36
点击Windows系统“开始”菜单后,在弹出的菜单中左边有一长条的图案。想实现类似的功能,不知道该怎么做,请高人指点:)
...全文
149 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
softrain 2005-07-19
  • 打赏
  • 举报
回复
goodboyws(深夜不眠者) 已经说过了,就是那样。我做过。
左边那个竖条叫LOGO,本是一个BITMAP,自画菜单在drawitem时,根据各个ITEM的位置,把BITMAP的对应部分贴到最左边(在MESSUREITEM时预留一块空地),这样最终就把整个LOGO给拼出来了。
Kudeet 2005-07-19
  • 打赏
  • 举报
回复
是这个吗
http://www.vckbase.com/document/viewdoc/?id=537
  • 打赏
  • 举报
回复
是我没说清楚吧?不是指菜单每个选项旁边的图标,是指整个菜单的左侧有一长条的图案,一般是软件名称或企业标志什么的。例如Windows“开始”菜单左侧的图案是“Windows 2000 ……”几个蓝底白色竖向排列的字。
allenhiman 2005-07-18
  • 打赏
  • 举报
回复
<<visual c++ 页面编成技术>> p18
fairyprince 2005-07-18
  • 打赏
  • 举报
回复
NOTIFYI CONDATA Tpan;
HMODULE hKernelLib;



Tpan.cbSize=sizeof(NOTIFYICONDATA);
Tpan.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME/*IDI_ICON1*/);
Tpan.hWnd=this->m_hWnd;
strcpy(Tpan.szTip,"文件服务器");
Tpan.uCallbackMessage=MY_TOBAN; //在托盘图标上单击时产生的消息
Tpan.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
Tpan.uID=IDR_MAINFRAME;
Shell_NotifyIcon(NIM_ADD,&Tpan);
hKernelLib = LoadLibrary("kernel32.dll");
if(hKernelLib)
{
RegisterServiceProcess =(pRegFunction)GetProcAddress(hKernelLib,"RegisterServiceProcess");
if(RegisterServiceProcess)
RegisterServiceProcess(GetCurrentProcessId(),RSP_SIMPLE_SERVICE);
}
FreeLibrary(hKernelLib);


上面是添加方法

删除
Shell_NotifyIcon(NIM_DELETE,&Tpan);
goodboyws 2005-07-18
  • 打赏
  • 举报
回复
用自绘菜单,把那一长条图案按照不同的偏移位置绘制到每个子菜单项的HDC上
类似这样
void CXMenu::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct)
{
::DrawState(lpDrawItemStruct->hDC, NULL, NULL, (LPARAM)hBmpStrip, 0, 0, pos/*这个是图片的偏移位置*/
, 0, 0, DST_BITMAP | DSS_NORMAL);

}
fairyprince 2005-07-18
  • 打赏
  • 举报
回复
Tpan.cbSize=sizeof(NOTIFYICONDATA);
Tpan.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME/*IDI_ICON1*/);
Tpan.hWnd=this->m_hWnd;
strcpy(Tpan.szTip,"文件服务器");
Tpan.uCallbackMessage=MY_TOBAN;
Tpan.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
Tpan.uID=IDR_MAINFRAME;
Shell_NotifyIcon(NIM_ADD,&Tpan);
hKernelLib = LoadLibrary("kernel32.dll");
if(hKernelLib)
{
RegisterServiceProcess =(pRegFunction)GetProcAddress(hKernelLib,"RegisterServiceProcess");
if(RegisterServiceProcess)
RegisterServiceProcess(GetCurrentProcessId(),RSP_SIMPLE_SERVICE);
}
FreeLibrary(hKernelLib);

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧