天天看点

MFC中窗口最小化到托盘处

1,自定义消息宏和NOTIFYICONDATA结构体

        #define WM_NC (WM_USER+1001)

        NOTIFYICONDATA NotifyIcon;

NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息、图标对应的窗口等内容。其定义为:

 typedef struct _NOTIFYICONDATA {

DWORD  cbSize;         //以字节为单位的这个结构的大小

       HWND   hWnd;   //接收托盘图标通知消息的窗口句柄

UINT     uID;       //应用程序定义的该图标的ID号

       UINT     uFlags;     //设置该图标的属性

       UINT  uCallbackMessage;//应用程序定义的消息ID号,此消息传递给hWnd

       HICON  hIcon;        //图标的句柄

       char      szTip[64];         //鼠标停留在图标上显示的提示信息

DWORD      dwState;

DWORD   dwStateMask;

TCHAR    szInfo[256];

union      {

UINTuTimeout;

UINT uVersion;

                 };

TCHAR szInfoTitle[64];

DWORD dwInfoFlags;

GUID guidItem;

            } NOTIFYICONDATA,*PNOTIFYICONDATA;

该结构中,成员uFlags可以使下列之一或组合:(此成员表明具体哪些其他成员为合法数据(即哪些成员起作用)。)

    NIF_ICON        设置成员hIcon有效

    NIF_MESSAGE    设置成员uCallbackMessage有效

NIF_TIP           设置成员szTip有效

NIF_STATE                dwState和dwStateMask成员起作用。

NIF_INFO           使用气球提示代替普通的工具提示框。szInfo, uTimeout, szInfoTitle和dwInfoFlags成员起作用。

NIF_GUID       保留。

uCallbackMessage

应用程序定义的消息标示。当托盘图标区域发生鼠标事件或者使用键盘选择或激活图标时,系统将使用此标示向由hWnd成员标示的窗口发送消息。消息响应函数的wParam参数标示了消息事件发生的任务栏图标,lParam参数根据事件的不同,包含了鼠标或键盘的具体消息,例如当鼠标指针移过托盘图标时,lParam将为WM_MOUSEMOVE。

hIcon           增加、修改或删除的图标的句柄。注意,windows不同版本对于图标有不同要求。Windows XP可支持32位。 

dwState

Version5.0,图标的状态,有两个可选值,如下:

NIS_HIDDEN                     图标隐藏

NIS_SHAREDICON           图标共享

dwStateMask 

uTimeout

和uVersion成员为联合体。uTimeout表示气球提示超时的时间,单位为毫秒,此时间后气球提示将消失。系统默认气球提示的超时时间最小值为10秒,最大值为30秒。如果设置的uTimeout的值小于10将设置最小值,如果大于30将设置最大值。将超时时间分为最大最小两种,是因为解决不同图标的气球提示同时弹出的问题,

uVersion

Version5.0. 和uTimeout成员为联合体。用来设置使用Windows95 还是 Windows 2000风格的图标消息接口。请参考Shell_NotifyIcon函数的说明获取更多信息。只有当使用Shell_NotifyIcon函数发送NIM_SETVERSION消息时,此成员才有作用。可选的值如下:

0            使用Windows95风格。针对Windows 2000版本之前的windows设计的软件请使用           此值。

NOTIFYICON_VERSION          使用Windows2000风格。 针对Windows 2000版本以及以后版本的windows设计的软件请使用此值。 

szInfoTitle

Version5.0. 指向一个以\0结束的字符串的指针。字符串的内容为气球提示的标题。此标题出现在气球提示框的上部,最多含有63个字符。

dwInfoFlags

Version5.0. 设置此成员用来给气球提示框增加一个图标。增加的图标出现在气球提示标题的左侧,注意如果szInfoTitle成员设为空字符串,则图标也不会显示。可选值如下:

NIIF_ERROR             错误图标。

NIIF_INFO                 信息图标。

NIIF_NONE         没有图标。

NIIF_USER         使用用户使用hIcon成员指明的图标,要求Windows XP Service                                Pack2 (SP2)或以后系统。

NIIF_WARNING         警告图标。

NIIF_ICON_MASK     Version 6.0. 保留。

NIIF_NOSOUND Version 6.0. 禁止播放相应声音。

最小化窗口到托盘处实现函数:

void CMainFrame::MINHIDEWINDOW()                  //最小化到托盘处

{

 NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);

 NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);  //托盘图标

 NotifyIcon.hWnd=m_hWnd;

 lstrcpy(NotifyIcon.szTip,_T("VC切分程序"));          //提示信息

 NotifyIcon.uCallbackMessage=WM_NC;            //消息

 NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;

 Shell_NotifyIcon(NIM_ADD,&NotifyIcon);           //绘制图标

 ShowWindow(SW_HIDE);

}

托盘图标右键菜单实现:

//快捷菜单消息响应

void CMainFrame::OnNewMenu1()

{

 ModifyStyleEx(0,WS_EX_TOPMOST);                //窗口置顶

 ShowWindow(SW_MAXIMIZE);

 Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);             //删除托盘图标

}

退出

void CMainFrame::OnNewMenu2()

{

 Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);             //删除托盘图标

 CMainFrame::OnClose(); 

}

MFC中窗口最小化到托盘处
MFC中窗口最小化到托盘处
MFC中窗口最小化到托盘处



继续阅读