托盘弹出气泡提示

转自:http://bbs.csdn.net/topics/330076698

添加系统托盘的时候指定NIF_INFO就可以了:


.h文件中:
C/C++ code ?
1
2
3
4
5
6
protected :
     void  __fastcall WndProc(TMessage &Message);
private :    // User declarations
     UINT  CRN_TRAYICON_MESSAGE;  // 托盘区响应消息
     void  __fastcall CrnAddTrayIcon();
     void  __fastcall CrnRemoveTrayIcon();


.cpp文件中:
C/C++ code ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include 
#include 
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
     : TForm(Owner)
{
     CRN_TRAYICON_MESSAGE = ::RegisterWindowMessage(TEXT( "IconNotify" ));
}
//---------------------------------------------------------------------------
// 重载WndProc
void  __fastcall TForm1::WndProc(TMessage &Message)
{
     if  (Message.Msg == WM_SYSCOMMAND)
     {
         if  (Message.WParam == SC_MINIMIZE)
         {
             CrnAddTrayIcon();
             ::ShowWindow(Handle, SW_HIDE);
         }
     }
     else  if  (Message.Msg == CRN_TRAYICON_MESSAGE && Message.LParam == WM_LBUTTONUP)
     {
         // 如果单击鼠标左键则显示窗体
         ::ShowWindow(Handle, SW_SHOW);
         // 使程序出现在任务栏
         ::ShowWindow(Application->Handle, SW_SHOW);
 
         CrnRemoveTrayIcon();
     }
     TForm::WndProc(Message);
}
//---------------------------------------------------------------------------
// 添加图标到托盘区
void  __fastcall TForm1::CrnAddTrayIcon()
{
     NOTIFYICONDATA nid;
     ::ZeroMemory(&nid,  sizeof (nid));
 
     nid.cbSize =  sizeof (nid);
     nid.hWnd = Handle;
     nid.uID = NULL;
     nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_INFO;
     nid.hIcon = Application->Icon->Handle;
     nid.uCallbackMessage = CRN_TRAYICON_MESSAGE;
     nid.dwInfoFlags = NIIF_INFO;
     nid.uTimeout = 1000;
     _tcsncpy(nid.szInfo,
             TEXT( "最小化窗体时程序将隐藏到这里.\r\n" )
             TEXT( "欢迎光临 www.ccrun.com" ),
             sizeof (nid.szInfo));
     _tcsncpy(nid.szInfoTitle, TEXT( "我的应用程序" ),  sizeof (nid.szInfoTitle));
 
     ::Shell_NotifyIcon(NIM_ADD, &nid);
}
//---------------------------------------------------------------------------
// 删掉托盘区的图标
void  __fastcall TForm1::CrnRemoveTrayIcon()
{
     NOTIFYICONDATA nid;
     ::ZeroMemory(&nid,  sizeof (nid));
     nid.cbSize =  sizeof (nid);
     nid.hWnd = Handle;
 
     ::Shell_NotifyIcon(NIM_DELETE, &nid);
}

http://tieba.baidu.com.cn/p/401816277

***********  VC创建托盘的几个步骤  ******************* 

第一步:在***APP头文件中定义一个自定义消息WM_MYMESSAGE, 
      #define MWM_MYMESSAGE WM_USER+5 

第二步:创建一个函数向任务栏添加托盘图标,然后在需要调用它的地方调用即可.
       NOTIFYICONDATA为包含任务栏托盘程序信息的结构体 
CreateIcon() 

//创建任务栏图标对象 
NOTIFYICONDATA tnd;    
tnd.cbSize=sizeof(NOTIFYICONDATA); 
//将当前程序托盘 
tnd.hWnd=this->m_hWnd;  //m_hWnd数据成员是一个HWND类型的公有变量 
tnd.uID=IDR_MAINFRAME; 
//定义托盘的属性:消息响应方式、图标、提示语言 
tnd.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
tnd.uCallbackMessage=WM_MYMESSAGE;
//托盘图标的设置 
tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); 
//托盘图标提示信息的编辑 
strcpy(tnd.szTip,"乐迷播放器,单击图标弹出窗口"); 
//向任务栏添加图标 
Shell_NotifyIcon(NIM_ADD,&tnd); 


第三步:利用向导自动生成鼠标左键按下函数 
void CMusicFanDlg::OnLButtonDown(UINT nFlags, CPoint point)  

// TODO: Add your message handler code here and/or call default 
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y)); 
CDialog::OnLButtonDown(nFlags, point); 

第四步:利用向导生成系统消息响应函数WindowProc(),并在其中添加消息响应函数,代码如下:
LRESULT CMusicFanDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)  

// TODO: Add your specialized code here and/or call the base class 

switch(message) 


case WM_MYMESSAGE: 
 { 
 if(lParam==WM_RBUTTONUP||lParam==WM_LBUTTONUP) 
 {  
 if(markTray) //其中markTray为BOOL型,用于标志当点击托盘图标时是显示还是隐藏程序对话框. 
 {   
    this->ShowWindow(SW_SHOW); 
                m_PlayListDlg->ShowWindow(SW_SHOW); 
                m_LyricDlg->ShowWindow(SW_SHOW); 
markTray=FALSE; 
 } 
 else 
 { 
 this->ShowWindow(SW_HIDE); 
             m_PlayListDlg->ShowWindow(SW_HIDE); 
                 m_LyricDlg->ShowWindow(SW_HIDE); 
 markTray=TRUE; 
 } 



break; 
 } 
  } 

return CDialog::WindowProc(message, wParam, lParam); 



 第五步: 关闭程序时取消托盘图标模式,创建一个函数,然后调用. 
void CMusicFanDlg::DelTrayPanel() 

//创建任务栏图标对象 
NOTIFYICONDATA tnd; 
tnd.cbSize=sizeof(NOTIFYICONDATA); 
//将当前程序托盘 
tnd.hWnd=this->m_hWnd;  //m_hWnd数据成员是一个HWND类型的公有变量 
tnd.uID=IDR_MAINFRAME; 
//定义托盘的属性:消息响应方式、图标、提示语言 
tnd.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
tnd.uCallbackMessage=WM_MYMESSAGE;
//托盘图标的设置 
tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); 
//托盘图标提示信息的编辑 
strcpy(tnd.szTip,"乐迷播放器,单击图标弹出窗口"); 
//向任务栏添加图标 

   //取消托盘图标模式 
Shell_NotifyIcon(NIM_DELETE ,&tnd); 


你可能感兴趣的:(Windows)