程序托盘化

自定义消息一个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编辑  收藏  举报

导航