VC实现支持气泡提示的系统托盘程序

2012-04-24 19:10:36|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 界面设计, MFC|来源:唯设编程网

系统托盘的效果,大家应该都见过,比如QQ、杀毒软件之类的都会在任务栏驻留图标,这对于需要经常保存运行状态的程序非常重要,总是在任务栏占据一个标签无法让用户获得良好的用户体验,VC实现这样的系统托盘程序非常简单,本文将对其进行介绍,并介绍使用气泡给用户弹出提示信息的方法。

要使VC程序支持系统托盘,首先需要认识NOTIFYICONDATA结构体,如下:

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

下面开始介绍使用VC实现气泡程序的具体流程:

步骤一:建立一基于对话框的工程,名称任意;

步骤二:在对话框头文件添加两个变量,一个NOTIFYICONDATA 变量nid,一个BOOL 变量isNotify,逻辑变量是为了判断托盘是否已经出现。在对话框的初始化OnInitDialog函数添加

isNotify=false;

然后在头文件上面添加#define WM_SHOWTASK (WM_USER+n) ,注意n>100以上。然后在消息映射函数里面添加一条声明消息:

afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);

步骤三:在对话框实现文件CPP里面在BEGIN_MESSAGE_MAPEND_MESSAGE_MAP 之间加入

ON_MESSAGE(WM_SHOWTASK,onShowTask)

步骤四:接着实现onShowTask ()函数功能,即托盘菜单

//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
LRESULT CCD_ROM_OPENDlg::onShowTask(WPARAM wParam,LPARAM lParam)
{
    if(wParam!=IDR_MAINFRAME)
    return 1;
    switch(lParam)
    {
        //右键起来时弹出快捷菜单,这里只有一个"关闭"
        case WM_RBUTTONUP:
        {
            LPPOINT lpoint=new tagPOINT;
            //得到鼠标位置
            ::GetCursorPos(lpoint);
            CMenu menu;
            //声明一个弹出式菜单
            menu.CreatePopupMenu();
            //增加菜单项"关闭",点击则发送消息WM_DESTROY给
            //主窗口(已隐藏),将程序结束。
            menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭"));
            //确定弹出式菜单的位置
            menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
                        SetForegroundWindow();
            HMENU hmenu=menu.Detach();   //资源回收
            menu.DestroyMenu();
            delete lpoint;
        }
        break;
        //双击左键的处理
        case WM_LBUTTONDBLCLK:
        {
            //简单的显示主窗口完事儿
            this->ShowWindow(SW_SHOW);
        }break;
    }
    return 0;
}
<12>
发表评论0条 】
网友评论(共?条评论)..
VC实现支持气泡提示的系统托盘程序