关于点击系统托盘后,弹出菜单的问题! 我看书,做了一个托盘程序,没有窗口,点击右键弹出一个菜单,但是我还想在菜单中加入自己的图标和背景。请问诸位如何实现?有人能指点我下么?未解决!未解决!未解决! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sofa 楼主找个例子吧 很简单 创建一个不可见的窗口作为Owner窗口就行了至于菜单加图标你就去找一个自绘菜单类用就行了 创建窗口时不指定 WS_VISIBLE或隐藏就可以。自绘菜单网上很多啊,比如这里http://www.vckbase.com/code/listcode.asp?mclsid=3&sclsid=303 给你一个SDK的参考~~~在处理主窗体过程函数中:case WM_CREATE: //... //创建状态栏 hStatusBar=CreateStatusWindow( WS_CHILD|WS_VISIBLE, "", hwnd, ID_STATUSBAR); nid.cbSize = sizeof(nid); nid.hWnd = hwnd; nid.uID = 0;//仅有一个图标显示 nid.uFlags = NIF_ICON|NIF_TIP|NIF_INFO|NIF_MESSAGE; nid.uCallbackMessage = WM_USER;//The WM_USER constant is used by applications to help define private messages for use by private window classes, nid.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_TITLE)); nid.dwInfoFlags = NIIF_INFO; lstrcpy(nid.szInfo,TEXT("NetSlave已启动")); nid.uTimeout = 15000; lstrcpy(nid.szInfoTitle,TEXT("信息提示")); lstrcpy(nid.szTip,TEXT("欢迎使用NetSlave"));//任务栏提示信息 Shell_NotifyIcon(NIM_ADD, &nid);//Adds an icon to the status area. Shell_NotifyIcon(NIM_MODIFY,&nid);////////////////////////然后继续在下面处理用户事件 //处理任务栏消息 case WM_USER: switch(LOWORD(lParam)) { case WM_LBUTTONDOWN://正常显示应用程序 ShowWindow(hwnd,SW_SHOWNORMAL); return 0; case WM_LBUTTONDBLCLK://正常显示应用程序 ShowWindow(hwnd,SW_SHOWNORMAL); return 0; case WM_RBUTTONDOWN: PlaySound(TEXT("E:\\个人作品\\NetSlave下载工具\\Sound.wav"),NULL,SND_ASYNC|SND_FILENAME); POINT ptCursor; GetCursorPos(&ptCursor); hMenu = LoadMenu(hInst,TEXT("TASKMENU")); hBitMap = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_EXIT));//填加退出位图 ShowMenu = GetSubMenu(hMenu,0); SetMenuItemBitmaps(ShowMenu,4,MF_BYPOSITION,hBitMap,hBitMap); hBitMap = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_ABOUT));//填加帮助位图 SetMenuItemBitmaps(ShowMenu,1,MF_BYPOSITION,hBitMap,hBitMap); TrackPopupMenu(ShowMenu,TPM_LEFTBUTTON|TPM_LEFTALIGN|TPM_RIGHTBUTTON, ptCursor.x,ptCursor.y,0,hwnd,NULL); PostMessage(hwnd,WM_NULL,0,0); DestroyMenu(hMenu); return 0; } return 0;楼主看看有没有帮助~~~ 函数CreateProcess,参数中的进程存在与否,返回值能区别吗? 如何得到一个listctrl的列数 有没有写过ADSL上网诊断工具的?能不能说说思路 vc里面为什么 list<string>就会有编译警告,而list<char>就没有? BHO得到要下载文件的URL的问题 求助DOS驻留内存程序编程高手,送100分!!! COM高手看看?编译方面的问题? C语言 请大虾帮我看看这个程序哪出措了,编译没问题,但是书入某些时间的时候出措 VC++如何实现复杂图像的切割问题 寻 “学友” 该用什么控件? 一个很简单的基础问题!马上结帖!
自绘菜单网上很多啊,比如这里
http://www.vckbase.com/code/listcode.asp?mclsid=3&sclsid=303
在处理主窗体过程函数中:
case WM_CREATE:
//...
//创建状态栏
hStatusBar=CreateStatusWindow(
WS_CHILD|WS_VISIBLE,
"",
hwnd,
ID_STATUSBAR);
nid.cbSize = sizeof(nid);
nid.hWnd = hwnd;
nid.uID = 0;//仅有一个图标显示
nid.uFlags = NIF_ICON|NIF_TIP|NIF_INFO|NIF_MESSAGE;
nid.uCallbackMessage = WM_USER;//The WM_USER constant is used by applications to help define private messages for use by private window classes,
nid.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_TITLE));
nid.dwInfoFlags = NIIF_INFO;
lstrcpy(nid.szInfo,TEXT("NetSlave已启动"));
nid.uTimeout = 15000;
lstrcpy(nid.szInfoTitle,TEXT("信息提示"));
lstrcpy(nid.szTip,TEXT("欢迎使用NetSlave"));//任务栏提示信息
Shell_NotifyIcon(NIM_ADD, &nid);//Adds an icon to the status area.
Shell_NotifyIcon(NIM_MODIFY,&nid);
////////////////////////
然后继续在下面处理用户事件
//处理任务栏消息
case WM_USER:
switch(LOWORD(lParam))
{
case WM_LBUTTONDOWN://正常显示应用程序
ShowWindow(hwnd,SW_SHOWNORMAL);
return 0;
case WM_LBUTTONDBLCLK://正常显示应用程序
ShowWindow(hwnd,SW_SHOWNORMAL);
return 0;
case WM_RBUTTONDOWN:
PlaySound(TEXT("E:\\个人作品\\NetSlave下载工具\\Sound.wav"),NULL,SND_ASYNC|SND_FILENAME);
POINT ptCursor;
GetCursorPos(&ptCursor);
hMenu = LoadMenu(hInst,TEXT("TASKMENU"));
hBitMap = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_EXIT));//填加退出位图
ShowMenu = GetSubMenu(hMenu,0);
SetMenuItemBitmaps(ShowMenu,4,MF_BYPOSITION,hBitMap,hBitMap);
hBitMap = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_ABOUT));//填加帮助位图
SetMenuItemBitmaps(ShowMenu,1,MF_BYPOSITION,hBitMap,hBitMap);
TrackPopupMenu(ShowMenu,TPM_LEFTBUTTON|TPM_LEFTALIGN|TPM_RIGHTBUTTON,
ptCursor.x,ptCursor.y,0,hwnd,NULL);
PostMessage(hwnd,WM_NULL,0,0);
DestroyMenu(hMenu);
return 0;
}
return 0;
楼主看看有没有帮助~~~