解决方案 »
- [Help]rasapi32.lib和msado15.dll是系统自带的么?
- 我建一个try工程,CtryDoc类里用不了sendmessage和messagebox,它说不接受三个参数,为什么,要怎么才行,它要的句柄在哪里,怎么得到?
- ---> 100分 在线等!!如何模拟合法客户端向服务器发数据?
- 如何控制windows media player?
- 求助:在以ADO连接的情况下如何将BOOL型或字符型数据如何存放在SQL SERVER 的BINARY字段中?
- 一个画刷得简单问题
- 请问一下有关在VC下E-MAIL编程的问题!
- 请教:我在编译《Windows核心编程》的例子时提示“You are not using the latest Platform SDK header/library”,谁那儿有这个最新的Pla
- 找一个有VC/MFC开发经验的
- 关于CreateProcess函数的小问题
- [matlab]好心人帮忙看一下simulink 中的matlab function 问题
- 求助关于用MFC做的浏览器的tab控件修改问题
1.定义消息宏
#define WM_TRAYICON_MSG (WM_USER+100)
2.任务栏托盘函数的封装
[cpp] view plaincopy
BOOL CWarEKeyDlg::TrayMyIcon(BOOL bAdd)
{
BOOL bRet = FALSE;
NOTIFYICONDATA tnd;
tnd.cbSize = sizeof(NOTIFYICONDATA);
tnd.hWnd = m_hWnd;
tnd.uID = IDR_MAINFRAME;
if ( bAdd == TRUE ) {
tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnd.uCallbackMessage = WM_TRAYICON_MSG;//消息响应函数
tnd.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
_tcscpy_s(tnd.szTip, sizeof(tnd.szTip), _T("WarEkey"));
bRet = Shell_NotifyIcon(NIM_ADD, &tnd);
}else{
ShowWindow(SW_SHOWNA);
SetForegroundWindow();
bRet = Shell_NotifyIcon(NIM_DELETE, &tnd);
}
return bRet;
} 3.消息响应函数的添加:
[cpp] view plaincopy
ON_MESSAGE(WM_TRAYICON_MSG, OnTrayCallBackMsg)
LRESULT CWarEKeyDlg::OnTrayCallBackMsg(WPARAM wparam, LPARAM lparam)
{
switch(lparam)
{
case WM_RBUTTONUP:
{
CMenu mMenu, *pMenu = NULL;
CPoint pt;
mMenu.LoadMenu(IDR_MENU);
pMenu = mMenu.GetSubMenu(0);
GetCursorPos(&pt);
SetForegroundWindow();
pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this);
break;
}
case WM_LBUTTONDBLCLK:
ShowWindow(SW_RESTORE);
SetForegroundWindow();
break;
default:break;
}
return NULL;
}
4.初始化时一般都让其显示任务栏托盘,直到程序结束才将托盘去掉。重载WM_SYSCOMMAND
[cpp] view plaincopy
if (nID==SC_MINIMIZE)
{
ShowWindow(SW_HIDE);
}
if (nID==SC_CLOSE)
{
TrayMyIcon(FALSE);
OnClose();
}