更新时间:2016-04-15 21:05:31浏览次数:1+次
对于软件的最小化功能,我们需要用到一个结构体:NOTIFYICONDATA。以及一个函数。
WINSHELLAPI BOOL API Shell_NotifuIcon()
{
DWORD dwMessage,
PNOTIFYICONDATA pnid
};
该函数返回一个BOOL值,失败返回0,返回非0则成功。
void CMinDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
nid.uCallbackMessage=WM_SHOWTASK;//自定义消息函数
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
wcscpy_s(nid.szTip,L"计划提醒");//当鼠标焦点在该图标上时,显示"计划提醒"
Shell_NotifyIcon(NIM_ADD,&nid);
ShowWindow(SW_HIDE);
}
LRESULT CMinDlg::OnMyTask(WPARAM wParam, LPARAM lParam)
{
if(wParam!=IDR_MAINFRAME)
{
return 1;
}
switch(lParam)
{
case WM_RBUTTONUP:
{
LPPOINT lpoint=new tagPOINT;
GetCursorPos(lpoint);
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenuW(MF_STRING,WM_DESTROY,L"关闭");//右键弹起时弹出菜单显示的菜单项,并处理该菜单项。
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
HMENU hMenu=menu.Detach();
menu.DestroyMenu();
delete lpoint;
break;
}
case WM_LBUTTONDBLCLK:
this->ShowWindow(SW_SHOW);//双击图标则显示主窗体
break;
}
return 1;
}
对于自定义的消息,我们在.h文件与.cpp文件中,得分别建立消息循环机制:afx_msg LRESULT OnMyTask(WPARAM wParam, LPARAM lParam);
ON_MESSAGE(WM_SHOWTASK,OnMyTask)
对于WM_SHOWTASK函数,我们得给它来个定义,要不然编译器不认识它:#define WM_SHOWTASK (WM_USER+1002)
好了,最后都是实现出来。好好理解,你会收获很多。相关资讯