任务栏托盘

要实现系统托盘,就要认识NOTIFYICONDATA结构体,如下:
typedef struct _NOTIFYICONDATA {
    DWORD cbSize;        //结构体的大小,以字节为单位
    HWND hWnd;           //窗口的句柄
    UINT uID;            //应用程序定义的任务栏图标的标识符
    UINT uFlags;         //此成员表明具体哪些其他成员为合法数据
    UINT uCallbackMessage;   //应用程序定义的消息标示
    HICON hIcon;         //增加、修改或删除的图标的句柄
    TCHAR szTip[64];     //指向一个以/0结束的字符串的指针
    DWORD dwState;       //Version 5.0,图标的状态
    DWORD dwStateMask;   //Version 5.0. 指明dwState成员的那些位可以被设置或者访问
    TCHAR szInfo[256];   //指向一个以/0结束的字符串的指针,字符串的内容为气球提示内容
    union {
        UINT uTimeout;   //表示气球提示超时的时间,单位为毫秒,此时间后气球提示将消失
        UINT uVersion;   //用来设置使用Windows 95 还是 Windows 2000风格的图标消息接口
    };
    TCHAR szInfoTitle[64];   //指向一个以/0结束的字符串的指针。字符串的内容为气球提示的标题
    DWORD dwInfoFlags;   //设置此成员用来给气球提示框增加一个图标,增加的图标出现在气球提示标题的左侧
    GUID guidItem;       //保留
    HICON hBalloonIcon;  //用于Windows Vista或更高版本的自定义气球图标
} NOTIFYICONDATA, *PNOTIFYICONDATA;


操作步骤:

1.插入右击托盘图标弹出的菜单资源,初始化菜单选项

2.添加处理托盘图标的自定义消息:
LRESULT CMyComboBoxDlg::OnTrayCallBackMsg(WPARAM wparam, LPARAM lparam)
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
{
switch(lparam)
{
case WM_RBUTTONUP:
{
CMenu mMenu, *pMenu = NULL;
CPoint pt;
mMenu.LoadMenu(IDR_MENU);
pMenu = mMenu.GetSubMenu(0);
GetCursorPos(&pt);
SetForegroundWindow();
pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this);
break;
}
case WM_LBUTTONDBLCLK:
ShowWindow(SW_RESTORE);
TrayMyIcon(FALSE);
break;
default:break;
}
return 0;
}

3.实现托盘:
BOOL CMyComboBoxDlg::TrayMyIcon(BOOL bAdd)
{
BOOL bRet = FALSE;
NOTIFYICONDATA tnd;
tnd.cbSize = sizeof(NOTIFYICONDATA);
tnd.hWnd = GetSafeHwnd();
tnd.uID = IDR_MAINFRAME;
if( bAdd == TRUE ) 
{
tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnd.uCallbackMessage = WM_TRAYICON_MSG;
tnd.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(tnd.szTip, _T("托盘成功"));
ShowWindow(SW_MINIMIZE);
ShowWindow(SW_HIDE);
bRet = Shell_NotifyIcon(NIM_ADD, &tnd);
}
else
{
ShowWindow(SW_SHOWNA);
SetForegroundWindow();
bRet = Shell_NotifyIcon(NIM_DELETE, &tnd);
}
return bRet;
}

4.将对话框的关闭按钮变成隐藏界面的效果,即要关闭按钮不会关闭程序
在OnSysCommand ()函数里面添加
else if ((nID & 0xFFF0) == SC_CLOSE)      //触发关闭按钮
{
   TrayMyIcon(TRUE);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值