VC实现托盘气泡提示

如果在VC6.0环境下,要将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 WM_ICONNOTIFY  WM_USER + 909 //图标响应消息(lParam)
#define ID_TASKBARICON 100           //参数(wParam)
ON_MESSAGE(WM_ICONNOTIFY, OnNotifyIcon)

添加变量: NOTIFYICONDATA m_nid;

在触发事件函数中添加代码:

SetIcon();
ShowBalloonTip("正在监控中...", "进程监控程序", 3000, 1);

初始化系统托盘图标:

void  CDlg::SetIcon()
{
 m_nid.cbSize 
=   sizeof (NOTIFYICONDATA);   
 m_nid.hWnd   
=  m_hWnd;
 m_nid.uID    
=  ID_TASKBARICON;  // 发出的消息中的wParam参数
 m_nid.uFlags  =  NIF_ICON | NIF_MESSAGE | NIF_TIP;
 m_nid.uCallbackMessage
       
=  WM_ICONNOTIFY;  // 点击托盘图标系统发出的消息(即发出的消息中的lParam参数)
 m_nid.hIcon   =  LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));  // 图标文件
 strcpy(m_nid.szTip,  " 进程监控程序 " );
 Shell_NotifyIcon(NIM_ADD, 
& m_nid);  // 加入图标
 ShowWindow(SW_HIDE);  // 隐藏窗体
}

托盘气泡提示函数:

BOOL CDlg::ShowBalloonTip(LPCTSTR szMsg, LPCTSTR szTitle, UINT uTimeout, DWORD dwInfoFlags)
{
 m_nid.cbSize
= sizeof (NOTIFYICONDATA);
 m_nid.uFlags 
=  NIF_INFO;
 m_nid.uTimeout 
=  uTimeout;
 m_nid.dwInfoFlags 
=  dwInfoFlags;
 strcpy(m_nid.szInfo,szMsg 
?  szMsg : _T( "" ));
 strcpy(m_nid.szInfoTitle,szTitle 
?  szTitle : _T( "" ));
 
return  Shell_NotifyIcon(NIM_MODIFY,  & m_nid);
}

双击系统托盘,使程序正常化:

LRESULT CDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
 POINT rpoint;
 CMenu tmenu;
 GetCursorPos(
& rpoint);
 
// 如果在托盘图标上双击左键
  if  ( ( wParam  ==  ID_TASKBARICON )  &&  ( lParam  ==  WM_LBUTTONDBLCLK ) )   
 {
  ShowWindow(SW_SHOW); 
// 显示窗体
  Shell_NotifyIcon(NIM_DELETE,  & m_nid);  // 删除系统托盘图标
 }
 
// 如果在托盘图标上单击右键
  if  ( ( wParam  ==  ID_TASKBARICON )  &&  ( lParam  ==  WM_RBUTTONDOWN ) )   
 {
  tmenu.LoadMenu(IDR_MAINMENU); 
// 加载系统主菜单
  SetForegroundWindow();  // 将程序置于桌面顶部,否则菜单将不会消失
  
// 在点击图标处弹出系统菜单的第一项
  tmenu.GetSubMenu( 0 ) -> TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,rpoint.x, rpoint.y,  this ); 
 }
 
return   0 ;
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VC是指Verifiable Credential(可验证凭证)的缩写,它是一种用于身份验证和授权的加密算法。而SM加密算法是一种国密算法,由中国国家密码管理局发布,用于信息安全领域。 想要实现VC作为载体的SM加密算法,首先需要理解SM算法的基本原理和加密过程。SM加密算法采用对称密码体制,并使用了非线性函数、置换、线性函数和模运算等操作。在加密过程中,首先需要生成加密所用的密钥,并进行密钥扩展。然后,根据SM算法的特定流程,将明文转换为密文,实现信息的加密。解密时需要使用相同的密钥,按照逆向的操作过程将密文还原为明文。 在VC中应用SM加密算法时,需要将VC的信息视为明文,通过对应的加密算法和密钥,将其加密为密文。加密后的密文将被嵌入到可验证凭证的数字签名或其他安全标记中。解密时,通过相应的密钥和解密算法,对密文进行解密操作,恢复出原始的VC信息。 实现VC中的SM加密算法需要注意以下几点: 1. 确定使用的SM算法版本和相应的密钥管理方案,例如采用SM2、SM3或者SM4算法。 2. 设计和实现对应的加密和解密算法,确保安全性、高效性和可靠性。 3. 考虑密钥的生成、存储和使用问题,确保密钥的安全性。 4. 将SM加密算法应用到VC中的具体场景中,例如身份认证、数字证书等。 总之,基于VC的SM加密算法的实现,需要在理解SM算法基本原理的基础上,结合VC的特点和应用场景,设计和开发相应的加密和解密算法。同时,要注意保障密钥的安全性,以确保加密和解密的过程可靠和有效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值