VC6.0下实现系统托盘的气泡提示窗口(Use NIIF_INFO)

效果演示如下:
系统托盘气球信息演示

href="http://www.j2megame.org/wupei/plugins/plogeshi/styles/plogeshi.css" type="text/css" rel="stylesheet" />首先需要更新一下VC6.0的SDK(否则会出现编译出错),方法如下:
1.把ShellAPI.h文件中的关于任务栏提示的函数和常量替换为下面的内容(重要):
  1. Tray notification definitions
  2.  
  3. typedef struct _NOTIFYICONDATAA {
  4.         DWORD cbSize;
  5.         HWND hWnd;
  6.         UINT uID;
  7.         UINT uFlags;
  8.         UINT uCallbackMessage;
  9.         HICON hIcon;
  10. #if (_WIN32_IE < 0x0500)
  11.         CHAR   szTip [ 64 ];
  12. #else
  13.         CHAR   szTip [ 128 ];
  14. #endif
  15. #if (_WIN32_IE >= 0x0500)
  16.         DWORD dwState;
  17.         DWORD dwStateMask;
  18.         CHAR   szInfo [ 256 ];
  19.         union {
  20.             UINT  uTimeout;
  21.             UINT  uVersion;
  22.         } DUMMYUNIONNAME;
  23.         CHAR   szInfoTitle [ 64 ];
  24.         DWORD dwInfoFlags;
  25. #endif
  26. #if (_WIN32_IE >= 0x600)
  27.         GUID guidItem;
  28. #endif
  29. } NOTIFYICONDATAA, *PNOTIFYICONDATAA;
  30. typedef struct _NOTIFYICONDATAW {
  31.         DWORD cbSize;
  32.         HWND hWnd;
  33.         UINT uID;
  34.         UINT uFlags;
  35.         UINT uCallbackMessage;
  36.         HICON hIcon;
  37. #if (_WIN32_IE < 0x0500)
  38.         WCHAR  szTip [ 64 ];
  39. #else
  40.         WCHAR  szTip [ 128 ];
  41. #endif
  42. #if (_WIN32_IE >= 0x0500)
  43.         DWORD dwState;
  44.         DWORD dwStateMask;
  45.         WCHAR  szInfo [ 256 ];
  46.         union {
  47.             UINT  uTimeout;
  48.             UINT  uVersion;
  49.         } DUMMYUNIONNAME;
  50.         WCHAR  szInfoTitle [ 64 ];
  51.         DWORD dwInfoFlags;
  52. #endif
  53. #if (_WIN32_IE >= 0x600)
  54.         GUID guidItem;
  55. #endif
  56. } NOTIFYICONDATAW, *PNOTIFYICONDATAW;
  57. #ifdef UNICODE
  58. typedef NOTIFYICONDATAW NOTIFYICONDATA;
  59. typedef PNOTIFYICONDATAW PNOTIFYICONDATA;
  60. #else
  61. typedef NOTIFYICONDATAA NOTIFYICONDATA;
  62. typedef PNOTIFYICONDATAA PNOTIFYICONDATA;
  63. #endif // UNICODE
  64.  
  65.  
  66. #define NOTIFYICONDATAA_V1_SIZE     FIELD_OFFSET(NOTIFYICONDATAA, szTip[64])
  67. #define NOTIFYICONDATAW_V1_SIZE     FIELD_OFFSET(NOTIFYICONDATAW, szTip[64])
  68. #ifdef UNICODE
  69. #define NOTIFYICONDATA_V1_SIZE      NOTIFYICONDATAW_V1_SIZE
  70. #else
  71. #define NOTIFYICONDATA_V1_SIZE      NOTIFYICONDATAA_V1_SIZE
  72. #endif
  73.  
  74. #define NOTIFYICONDATAA_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAA, guidItem)
  75. #define NOTIFYICONDATAW_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAW, guidItem)
  76. #ifdef UNICODE
  77. #define NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAW_V2_SIZE
  78. #else
  79. #define NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAA_V2_SIZE
  80. #endif
  81.  
  82.  
  83. #if (_WIN32_IE >= 0x0500)
  84. #define NIN_SELECT          (WM_USER + 0)
  85. #define NINF_KEY            0x1
  86. #define NIN_KEYSELECT       (NIN_SELECT | NINF_KEY)
  87. #endif
  88.  
  89. #if (_WIN32_IE >= 0x0501)
  90. #define NIN_BALLOONSHOW     (WM_USER + 2)
  91. #define NIN_BALLOONHIDE     (WM_USER + 3)
  92. #define NIN_BALLOONTIMEOUT  (WM_USER + 4)
  93. #define NIN_BALLOONUSERCLICK (WM_USER + 5)
  94. #endif
  95.  
  96.  
  97. #define NIM_ADD         0x00000000
  98. #define NIM_MODIFY      0x00000001
  99. #define NIM_DELETE      0x00000002
  100. #if (_WIN32_IE >= 0x0500)
  101. #define NIM_SETFOCUS    0x00000003
  102. #define NIM_SETVERSION  0x00000004
  103. #define     NOTIFYICON_VERSION 3
  104. #endif
  105.  
  106. #define NIF_MESSAGE     0x00000001
  107. #define NIF_ICON        0x00000002
  108. #define NIF_TIP         0x00000004
  109. #if (_WIN32_IE >= 0x0500)
  110. #define NIF_STATE       0x00000008
  111. #define NIF_INFO        0x00000010
  112. #endif
  113. #if (_WIN32_IE >= 0x600)
  114. #define NIF_GUID        0x00000020
  115. #endif
  116.  
  117. #if (_WIN32_IE >= 0x0500)
  118. #define NIS_HIDDEN              0x00000001
  119. #define NIS_SHAREDICON          0x00000002
  120.  
  121. // says this is the source of a shared icon
  122.  
  123. // Notify Icon Infotip flags
  124. #define NIIF_NONE       0x00000000
  125. // icon flags are mutually exclusive
  126. // and take only the lowest 2 bits
  127. #define NIIF_INFO       0x00000001
  128. #define NIIF_WARNING    0x00000002
  129. #define NIIF_ERROR      0x00000003
  130. #define NIIF_ICON_MASK  0x0000000F
  131. #if (_WIN32_IE >= 0x0501)
  132. #define NIIF_NOSOUND    0x00000010
  133. #endif
  134. #endif
  135.  
  136. SHSTDAPI_ ( BOOL ) Shell_NotifyIconA (DWORD dwMessage, PNOTIFYICONDATAA lpData );
  137. SHSTDAPI_ ( BOOL ) Shell_NotifyIconW (DWORD dwMessage, PNOTIFYICONDATAW lpData );
  138. #ifdef UNICODE
  139. #define Shell_NotifyIcon  Shell_NotifyIconW
  140. #else
  141. #define Shell_NotifyIcon  Shell_NotifyIconA
  142. #endif // !UNICODE
  143.  
  144. End Tray Notification Icons

2.在stdafx.h文件中添加:

  1. #ifndef _WIN32_IE // 允许使用 IE 4.0 或更高版本的特定功能。
  2. #define _WIN32_IE 0x0500 //为 IE 5.0 及更新版本改变为适当的值。
  3. #endif

3.添加函数(需要先添加系统托盘图标)

  1. //添加成员变量
  2. NOTIFYICONDATA m_nid;
  3.  
  4. /***************************************
  5.  * pWnd - 窗体指针
  6.  * szMsg - 显示的内部信息
  7.  * szTitle - 显示的标题信息
  8.  * uTimeout - 这个时间过后,气球自动消失(好像不启作用)
  9.  * uCallbackMessage - 消息标识
  10.  ***************************************/
  11. BOOL CMyCatchFun:: ShowBalloonTip (
  12.                 CWnd* pWnd,
  13.                 LPCTSTR szMsg,
  14.                 LPCTSTR szTitle,
  15.                 UINT uTimeout,
  16.                 UINT uCallbackMessage
  17.         )
  18. {
  19.         m_nid. cbSize = sizeof (NOTIFYICONDATA );
  20.         m_nid. uTimeout = uTimeout;
  21.         m_nid. uVersion = NOTIFYICON_VERSION;
  22.         m_nid. dwInfoFlags = NIIF_INFO;  //如果前面修改错误,这里会发生"未定义标识符"错误
  23.         m_nid. uFlags = NIF_MESSAGE|NIF_INFO|NIF_ICON;
  24.         m_nid. uID = IDR_MAINFRAME;
  25.         m_nid. hWnd = pWnd->m_hWnd;
  26.         m_nid. hIcon = AfxGetApp ( )->LoadIcon (IDR_MAINFRAME );
  27.         m_nid. uCallbackMessage = uCallbackMessage;
  28.        
  29.         _tcscpy (m_nid. szInfoTitle,szTitle );
  30.         _tcscpy (m_nid. szInfo,szMsg );
  31.  
  32.         return Shell_NotifyIcon (NIM_MODIFY,&m_nid );
  33. }

4.修改气球提示信息

  1. void CMyDlg:: OnButton1 ( )
  2. {
  3.         _tcscpy (m_nid. szInfoTitle, "提醒你" );
  4.         _tcscpy (m_nid. szInfo, "内容改变" );
  5.         m_nid. uTimeout= 1000;
  6.         m_nid. uVersion=NOTIFYICON_VERSION;
  7.         Shell_NotifyIcon (NIM_MODIFY,&m_nid );
  8. }

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值