VC++ 使用气泡提示

转载 2006年06月23日 15:33:00


首先需要更新一下VC6.0的SDK,方法如下: 把ShellAPI.h文件中的关于任务栏提示的函数和常量替换为下面的内容:

//// Tray notification definitions
////

typedef struct _NOTIFYICONDATAA {
       
DWORD cbSize;
       
HWND hWnd;
       
UINT uID;
       
UINT uFlags;
       
UINT uCallbackMessage;
       
HICON hIcon;
#if (_WIN32_IE < 0x0500)
       
CHAR   szTip[64];
#else
       
CHAR   szTip[128];
#endif
#if
(_WIN32_IE >= 0x0500)
       
DWORD dwState;
       
DWORD dwStateMask;
       
CHAR   szInfo[256];
       
union {
           
UINT  uTimeout;
           
UINT  uVersion;
        }
DUMMYUNIONNAME;
       
CHAR   szInfoTitle[64];
       
DWORD dwInfoFlags;
#endif
#if
(_WIN32_IE >= 0x600)
       
GUID guidItem;
#endif
} NOTIFYICONDATAA, *PNOTIFYICONDATAA;
typedef struct _NOTIFYICONDATAW {
       
DWORD cbSize;
       
HWND hWnd;
       
UINT uID;
       
UINT uFlags;
       
UINT uCallbackMessage;
       
HICON hIcon;
#if (_WIN32_IE < 0x0500)
       
WCHAR  szTip[64];
#else
       
WCHAR  szTip[128];
#endif
#if
(_WIN32_IE >= 0x0500)
       
DWORD dwState;
       
DWORD dwStateMask;
       
WCHAR  szInfo[256];
       
union {
           
UINT  uTimeout;
           
UINT  uVersion;
        }
DUMMYUNIONNAME;
       
WCHAR  szInfoTitle[64];
       
DWORD dwInfoFlags;
#endif
#if
(_WIN32_IE >= 0x600)
       
GUID guidItem;
#endif
} NOTIFYICONDATAW, *PNOTIFYICONDATAW;
#ifdef UNICODE
typedef NOTIFYICONDATAW NOTIFYICONDATA;
typedef PNOTIFYICONDATAW PNOTIFYICONDATA;
#else
typedef
NOTIFYICONDATAA NOTIFYICONDATA;
typedef PNOTIFYICONDATAA PNOTIFYICONDATA;
#endif // UNICODE


#define NOTIFYICONDATAA_V1_SIZE     FIELD_OFFSET(NOTIFYICONDATAA, szTip[64])
#define NOTIFYICONDATAW_V1_SIZE     FIELD_OFFSET(NOTIFYICONDATAW, szTip[64])
#ifdef UNICODE
#define NOTIFYICONDATA_V1_SIZE      NOTIFYICONDATAW_V1_SIZE
#else
#define
NOTIFYICONDATA_V1_SIZE      NOTIFYICONDATAA_V1_SIZE
#endif

#define
NOTIFYICONDATAA_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAA, guidItem)
#define NOTIFYICONDATAW_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAW, guidItem)
#ifdef UNICODE
#define NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAW_V2_SIZE
#else
#define
NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAA_V2_SIZE
#endif


#if
(_WIN32_IE >= 0x0500)
#define NIN_SELECT          (WM_USER + 0)
#define NINF_KEY            0x1
#define NIN_KEYSELECT       (NIN_SELECT | NINF_KEY)
#endif

#if
(_WIN32_IE >= 0x0501)
#define NIN_BALLOONSHOW     (WM_USER + 2)
#define NIN_BALLOONHIDE     (WM_USER + 3)
#define NIN_BALLOONTIMEOUT  (WM_USER + 4)
#define NIN_BALLOONUSERCLICK (WM_USER + 5)
#endif


#define
NIM_ADD         0x00000000
#define NIM_MODIFY      0x00000001
#define NIM_DELETE      0x00000002
#if (_WIN32_IE >= 0x0500)
#define NIM_SETFOCUS    0x00000003
#define NIM_SETVERSION  0x00000004
#define     NOTIFYICON_VERSION 3
#endif

#define
NIF_MESSAGE     0x00000001
#define NIF_ICON        0x00000002
#define NIF_TIP         0x00000004
#if (_WIN32_IE >= 0x0500)
#define NIF_STATE       0x00000008
#define NIF_INFO        0x00000010
#endif
#if
(_WIN32_IE >= 0x600)
#define NIF_GUID        0x00000020
#endif

#if
(_WIN32_IE >= 0x0500)
#define NIS_HIDDEN              0x00000001
#define NIS_SHAREDICON          0x00000002

// says this is the source of a shared icon

// Notify Icon Infotip flags
#define NIIF_NONE       0x00000000
// icon flags are mutually exclusive
// and take only the lowest 2 bits
#define NIIF_INFO       0x00000001
#define NIIF_WARNING    0x00000002
#define NIIF_ERROR      0x00000003
#define NIIF_ICON_MASK  0x0000000F
#if (_WIN32_IE >= 0x0501)
#define NIIF_NOSOUND    0x00000010
#endif
#endif

SHSTDAPI_(BOOL) Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData);
SHSTDAPI_(BOOL) Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData);
#ifdef UNICODE
#define Shell_NotifyIcon  Shell_NotifyIconW
#else
#define
Shell_NotifyIcon  Shell_NotifyIconA
#endif // !UNICODE

////
//// End Tray Notification Icons
////

 

在stdafx.h文件中添加以下内容:

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


自定义消息及处理函数:

#define MYWM_NOTIFYICON WM_USER+1
afx_msg void OnMyIconNotify(WPARAM wParam,LPARAM lParam);
ON_MESSAGE(MYWM_NOTIFYICON,OnMyIconNotify
)

添加变量: NOTIFYICONDATA m_nData;

 

在任务栏通知区添加图标和提示的代码:

m_nData.cbSize=sizeof(NOTIFYICONDATA);
m_nData.hWnd=GetSafeHwnd();
m_nData.uFlags=NIF_MESSAGE|NIF_INFO|NIF_ICON;
m_nData.uCallbackMessage=MYWM_NOTIFYICON;
m_nData.uID=IDR_MAINFRAME;
m_nData.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_nData.dwInfoFlags=NIIF_INFO;

_tcscpy
(m_nData.szInfoTitle,"管理员");
_tcscpy(m_nData.szInfo,"欢迎使用");

Shell_NotifyIcon(NIM_ADD,&m_nData);

修改气泡提示的代码:

void CTipDlg::OnButton1()
{
_tcscpy(m_nData.szInfoTitle,"提醒你"
);
_tcscpy(m_nData.szInfo,"内容改变"
);
m_nData.uTimeout=1000
;
m_nData.uVersion=NOTIFYICON_VERSION;
Shell_NotifyIcon(NIM_MODIFY,&m_nData
);

}

删除的代码:
BOOL CTipDlg::DestroyWindow()
{
  Shell_NotifyIcon(NIM_DELETE,&m_nData
);
  return CDialog::DestroyWindow
();
}

 

消息处理函数:

void CTipDlg::OnMyIconNotify(WPARAM wParam,LPARAM lParam)
{
UINT uMouseMsg=LOWORD(lParam);
switch(uMouseMsg)
{
case WM_LBUTTONDBLCLK:
SendMessage(WM_CLOSE,0,0);
break;

case WM_LBUTTONDOWN:
Shell_NotifyIcon(NIM_MODIFY,&m_nData);
break;
}
}

具体使用方法请参考源代码和相关资料!

相关文章推荐

在VC++6.0与VB中使用气泡提示

首先需要更新一下VC6.0的SDK,方法如下: 把ShellAPI.h文件中的关于任务栏提示的函数和常量替换为下面的内容: //// Tray notification definitions /...

VC++下气泡窗口(ver1.0)

  • 2010年07月23日 11:40
  • 11.08MB
  • 下载

【转载】使用 VC++ 6.0 的一些提示

使用 VC++ 6.0 的一些提示   - 永远记住,使用任何程序(不论是 Word 还是 VC++ 6.0 还是在玩游戏)时,尽可能地频繁保存。相信我,一个死机就够让你抓狂了。   - 写程序之...
  • chtdsl
  • chtdsl
  • 2014年05月11日 15:54
  • 490

VC 系统托盘、气泡提示

系统环境:Windows 7 软件环境:Visual Studio 2008 SP1 本次目的:实现系统托盘、气泡提示的效果       系统托盘的效果,大家应该都见过,比如QQ、杀毒软件之...
  • jiht594
  • jiht594
  • 2012年04月20日 15:42
  • 1122

VC6.0 系统托盘、气泡提示、右键菜单

系统环境:Windows 7 软件环境:vc++6.0 SP6 本次目的:实现系统托盘、气泡提示、右键菜单的效果       系统托盘的效果,大家应该都见过,比如QQ、杀毒软件之类的都会在任务栏驻留...

VC实现托盘气泡提示

文章转载自: http://blog.csdn.net/zltpc007/article/details/2026574 ======================================...

如何去掉去掉VC++的安全警告提示

在用Vc进行进程编写时,你有可能会遇到一大堆的警告:warning C4996 如:warning C4996: '': This function or variable may be unsaf...
  • hcxowe
  • hcxowe
  • 2012年02月09日 16:00
  • 913

VC++开发的ActiveX如何加入安全机制,避免IE中提示“在此页上的ActiveX控件和本页上的其他部分的交互可能不安全,你想允许这种交互吗?”

转自 http://www.cnblogs.com/zdxster/archive/2011/01/27/1945868.html 在EOS6的项目中,如果采用VC++开发的ActiveX,那么第一...
  • QHH_QHH
  • QHH_QHH
  • 2016年09月12日 16:33
  • 788

在VC++中使用CxImage库读写图像实现像素操作

VC++中使用CxImage读写图像实现像素操作与效果演示
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++ 使用气泡提示
举报原因:
原因补充:

(最多只允许输入30个字)