转自:http://bbs.csdn.net/topics/330076698
添加系统托盘的时候指定NIF_INFO就可以了:
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();
|
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 <tchar.h>
#include <stdio.h>
//---------------------------------------------------------------------------
__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);
}