现在的位置: 首页 > 综合 > 正文

MFC中窗口最小化到托盘处

2017年11月05日 ⁄ 综合 ⁄ 共 2990字 ⁄ 字号 评论关闭

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(); 
}
























抱歉!评论已关闭.