龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

vc++应用程序最小化后在系统托盘显示小图标

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
这里主要来实现这样的功能,就是当点击最小化时,把对话框隐藏掉,并且让它在系统托盘小时小图标,如图:最左边的应用程序图标,就像QQ一样,当右键这小图标时,会弹出一个菜

这里主要来实现这样的功能,就是当点击最小化时,把对话框隐藏掉,并且让它在系统托盘小时小图标,如图:最左边的应用程序图标,就像QQ一样,当右键这小图标时,会弹出一个菜单,如图:,点击它即可以退出程序。 只是简单实现这个功能,没有考虑太多。
-,先来介绍NOTIFYICONDATA结构

typedef struct _NOTIFYICONDATA ...{
    DWORD cbSize;  //以字节为单位这个结构的大小
    HWND hWnd;    //接收托盘图表通知消息的窗口句柄
    UINT uID;         //应用程序定义的该图表的ID号
    UINT uFlags;    // 设置该图表的属性
    UINT uCallbackMessage ; // 应用程序定义的消息ID号,此消息传递给hWnd
    HICON hIcon;   // 图表句柄
    char szTip[64];   // 鼠标停留在该图标上提示信息
} NOTIFYICONDATA, *PNOTIFYICONDATA;
二:Shell_NotifyIcon介绍
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(    DWORD dwMessage,     PNOTIFYICONDATA pnid); 
Sends a message to the system to add, modify, or delete an icon from the taskbar status area.

Returns nonzero if successful, or zero otherwise.
dwMessage
Message value to send. This parameter can be one of these values: NIM_ADD  Adds an icon to the status area.
NIM_DELETE  Deletes an icon from the status area.
NIM_MODIFY  Modifies an icon in the status area. 

pnid
Address of a NOTIFYICONDATA structure. The content of the structure depends on the value of dwMessage.
三:实现例子代码:

首先自己要定义一个消息ID

#define  WM_SYSTEMTRAY WM_USER+1;

在头文件中定义一个向应该消息的函数如:

afx_msg LRESULT OnSystemTray(WPARAM wParam, LPARAM lParam);

添加消息响应宏:ON_MESSAGE(WM_SYSTEMTRAY, OnSystemTray)

响应该消息的函数可以如下:

LRESULT CSystemTrayDlg::OnSystemTray(WPARAM wParam, LPARAM lParam)
...{
    // wParam = the nid.uID defined above
    // (useful if you have more then one icon in tray)
    // lParam = mouse message
    if ( wParam = IDR_MAINFRAME )
    ...{
        switch( lParam )
        ...{
        case WM_LBUTTONDOWN:
            this->ShowWindow(SW_NORMAL);
            break;
        case WM_RBUTTONDOWN:
            CMenu menu;
            menu.LoadMenu(IDR_MENU);
            POINT pt;
            ::GetCursorPos(&pt);
            menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTALIGN, pt.x, pt.y, AfxGetMainWnd());
            break;
        }
    }
    return 1;
}
假如建立的工程是居于DLG的

精彩图集

赞助商链接