Vs008中关于托盘气泡提示显示不出来的问题and sdk实现托盘加气泡

本文介绍了一种解决Windows应用中托盘图标无法正常弹出气泡通知的方法,通过调整targetver.h头文件中的宏定义,并提供具体的代码实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不弹出气泡的问题在targetver.h头文件中

 

将0x0600都改成0x0501 ,如下所示:

#pragma once

// 以下宏定义要求的最低平台。要求的最低平台
// 是具有运行应用程序所需功能的 Windows、Internet Explorer 等产品的
// 最早版本。通过在指定版本及更低版本的平台上启用所有可用的功能,宏可以
// 正常工作。

// 如果必须要针对低于以下指定版本的平台,请修改下列定义。
// 有关不同平台对应值的最新信息,请参考 MSDN。
#ifndef WINVER                          // 指定要求的最低平台是 Windows Vista。
#define WINVER 0x0501           // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif

#ifndef _WIN32_WINNT            // 指定要求的最低平台是 Windows Vista。
#define _WIN32_WINNT 0x0501     // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif

#ifndef _WIN32_WINDOWS          // 指定要求的最低平台是 Windows 98。
#define _WIN32_WINDOWS 0x0410 // 将此值更改为适当的值,以适用于 Windows Me 或更高版本。
#endif

#ifndef _WIN32_IE                       // 指定要求的最低平台是 Internet Explorer 7.0。
#define _WIN32_IE 0x0700        // 将此值更改为相应的值,以适用于 IE 的其他版本。
#endif

 

郁闷,一个系统的问题如果你不知道的话会让你闷死的。。。

 

NOTIFYICONDATAA note;
#define WM_SHELLNOTIFY WM_USER+5
//在resource中添加#define IDI_TRAY                        9

case WM_SIZE:
   //MoveWindow(hList, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
  if (wParam==SIZE_MINIMIZED)
  {
   note.cbSize=sizeof(NOTIFYICONDATA);
   note.hWnd=hDlg;  
   note.uID=IDI_TRAY;//自定义的ID
   note.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
   note.uCallbackMessage=WM_SHELLNOTIFY; 这个是自定义的消息
   note.hIcon=LoadIconA(hInst,(LPCSTR)IDI_ICON1);//图标
   lstrcpyA(note.szTip,"天血防火墙 爱杀之爪");//鼠标移到托盘时显示的字符
   ShowWindow(hDlg,SW_HIDE);
   Shell_NotifyIconA(NIM_ADD,&note);

  }

  break;


case WM_SHELLNOTIFY ://这个是自定义的消息

  if (wParam==IDI_TRAY)
  {
   if (lParam==WM_RBUTTONDOWN)
   {
    //MessageBoxA(0,0,0,MB_OK);
    //创建pop菜单
    //__asm int 3
    hPopupMenuTree=CreatePopupMenu();
    //这里面的
//在rc中添加如下
//IDR_TRAYICON MENU
//BEGIN
 //   POPUP "托盘(&T)"
 //   BEGIN
 ///       MENUITEM "打开(&O)",                      IDM_OPENMAIN
///        MENUITEM "关于 (&A)...",                  IDM_ABOUTMAIN
 //       MENUITEM SEPARATOR
 //       MENUITEM "退出 程序(&S)",                   IDM_EXITMAIN
 //   END
//END
    AppendMenu(hPopupMenuTree,MF_STRING,IDM_OPENMAIN,L"打开主窗口");

    AppendMenu(hPopupMenuTree,MF_STRING,IDM_ABOUTMAIN,L"关于");

    AppendMenu(hPopupMenuTree,MF_STRING,IDM_EXITMAIN,L"退出");
    
    GetCursorPos(&Pos);
    SetForegroundWindow(hDlg);
    TrackPopupMenu(hPopupMenuTree,TPM_RIGHTALIGN,Pos.x,Pos.y,NULL,hDlg,NULL);
    GetLastError();
    PostMessage(hDlg,WM_NULL,0,0);

   }
   else if (lParam==WM_LBUTTONDBLCLK)
   {
    SendMessageA(hDlg,WM_COMMAND,IDM_OPENMAIN,0);
   }
  }
  break;
case WM_CLOSE:
  
  DestroyMenu(hPopupMenuTree);//删除菜单
//还要消耗那个托盘图标的,没弄了,呵呵
  EndDialog(hDlg,0);
  break;


//显示气泡的,自己随时用就行了
memset(&note,0,sizeof(NOTIFYICONDATAA));
 note.hWnd=hDlg;
 note.uID=IDI_TRAY;
 note.cbSize=sizeof(NOTIFYICONDATAA);
 note.uFlags=NIF_INFO|NIF_MESSAGE|NIF_ICON;
 note.uTimeout=4000;//气泡超时时间
 note.dwInfoFlags=NIIF_INFO;
 note.hIcon=LoadIconA(hInst,(LPCSTR)IDI_ICON1);//IDI_ICON1换成自己想要的图标

 note.uCallbackMessage=WM_SHELLNOTIFY;

 strcpy(note.szInfo,szMsg);//szMsg自己的内容
 // 
 strcpy(note.szInfoTitle,szTitle);//标题内容
 // 
 if (Shell_NotifyIconA(NIM_MODIFY,&note)==TRUE)
 {
  MessageBoxA(0,"气泡成功",0,MB_OK);
 }
 else
 {
  //MessageBoxA(0,"气泡失败",0,MB_OK);

 }
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值