关闭

VC++ 使用气泡提示

3755人阅读 评论(2) 收藏 举报


首先需要更新一下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;
}
}

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3708551次
    • 积分:60357
    • 等级:
    • 排名:第42名
    • 原创:1549篇
    • 转载:1252篇
    • 译文:0篇
    • 评论:459条
    最新评论