在对话框的初始化OnInitDialog()中:
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = m_hWnd;
tnid.uID = IDR_MAINFRAME;
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
//MYWM_NOTIFYICON为自定义消息
tnid.uCallbackMessage = MYWM_NOTIFYICON;
tnid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//显示图标
// 工具提示信息
CString lpszTip = "我的小程序.";
if (lpszTip)
lstrcpyn(tnid.szTip, lpszTip, sizeof(tnid.szTip));
else
tnid.szTip[0] = '\0';
Shell_NotifyIcon(NIM_DELETE, &tnid);
这样,通知栏已经有了一个自己的图标了。
程序栏有了图标还不够,需要添加鼠标消息:
自定义消息:
#define MYWM_NOTIFYICON WM_USER + 1
添加消息响应函数:
afx_msg void On_MProc(WPARAM wParam, LPARAM lParam) ;
ON_MESSAGE(MYWM_NOTIFYICON,On_MProc)
编写消息函数:
void CHTMLDlgDlg::On_MProc(WPARAM wParam, LPARAM lParam)
{
UINT uID;
UINT uMouseMsg;
uID = (UINT) wParam;
uMouseMsg = (UINT) lParam;
CPoint point;
GetCursorPos(&point);
CMenu menu; //这个菜单需要自己添加一个菜单,菜单项为显示和关闭。这样在鼠标右键单击的时候,就有了菜单。
menu.LoadMenu(IDR_MENU);
CMenu* pPopup=menu.GetSubMenu(0); //get pointer to popup menu
switch (uMouseMsg)
{
case WM_RBUTTONDOWN:
pPopup->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this); //弹出菜单
break;
case WM_LBUTTONDBLCLK: //双击菜单显示
ShowWindow(TRUE);
//处理命令消息,如菜单点击
break;
}
if(menu.m_hMenu)
menu.DestroyMenu(); //销毁菜单
}