程序托盘化
自定义消息一个windows消息 #define WM_SHOWTASK WM_USER+5
为消息创建相应的回调函数 LRESULT OnShowTask(WPARAM wParam,LPARAM lParam);
在 DodataExchange() 里面为消息配对相应的消息函数
BEGIN_MESSAGE_MAP(CAdapterSetDlg, CDialog)
//{{AFX_MSG_MAP(CAdapterSetDlg)
ON_MESSAGE(WM_SHOWTASK,OnShowTask)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
然后开始看下面的函数:
void CAdapterSetDlg::Initroy()
{
NOTIFYICONDATA nid; //托盘类
//初始化
nid.cbSize=sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));//托盘后图标
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
nid.uCallbackMessage=WM_SHOWTASK; //触发消息
strcpy(nid.szTip,"Adapter"); //托盘后鼠标移动到上面的显示名称
Shell_NotifyIcon(NIM_ADD,&nid);
ShowWindow(SW_HIDE); //令主窗口隐藏
}
LRESULT CAdapterSetDlg::OnShowTask(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.AppendMenu(MF_STRING,WM_DESTROY,"退出");
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);
SetForegroundWindow();
}
break;
}
return 1;
}
posted on 2012-02-27 16:55 fanhongyue 阅读(226) 评论(0) 编辑 收藏 举报