最小化对话框到托盘

来源:互联网 发布:python中append函数 编辑:程序博客网 时间:2024/04/20 03:19

今天在弄这个东东 其它的网上都有 我在这里更喜欢这样的方法:

下面这个方法是生成和删除托盘图标的方法

 

void CMYDlg::toTray(BOOL show)  //如果show为真 就是要显示窗口 否则放到托盘
{
    NOTIFYICONDATA pnid;
    pnid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//该结构体大小
    pnid.hWnd=m_hWnd;    //窗口句柄
    pnid.uID=(UINT)m_hIcon;      //图标句柄
    pnid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;  /*图标有效|自定义消息有效|鼠标指向显示文字有效*/
    pnid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
    pnid.hIcon=m_hIcon;         //图标句柄
    strcpy(pnid.szTip,"这是我的托盘图标");//鼠标指到那所显示的文字
    if(!show)
    {
        Shell_NotifyIcon(NIM_ADD,&pnid);//在托盘区添加图标
        ShowWindow(SW_HIDE);//隐藏主窗口    
    }
    else
    {
        Shell_NotifyIcon(NIM_DELETE,&pnid);//删除托盘图标
        ShowWindow(SW_SHOW);//显示主窗口
    }
}

以上方法的中的 这句:      ShowWindow(SW_SHOW);//显示主窗口 执行了生并不能把窗口显示在最前面  而只是在任务栏上有显示  那么我们把 SW_SHOW 换成 SW_RESTORE);//用原来的大小和位置显示主窗口,就能够把我们的窗口显示到最前面了

 

 

而我们怎么知道一个窗口的最小化按钮被点击了呢???

可以重载这个函数:

void CtestMinDlg::OnSize(UINT nType, int cx, int cy)
{
 CDialog::OnSize(nType, cx, cy);
 if (nType == SIZE_MINIMIZED)  //SIZE_MINIMIZED就表示最小化按钮被点击了 那么托盘上的图标也就要消失了  下面这句就是删除图标了
 {
  toTray(FALSE);
 }
}

LRESULT CtestMinDlg::onShowTask(WPARAM wParam,LPARAM lParam)
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
{
 if(wParam!=IDR_MAINFRAME)
  return 1;
 switch(lParam)
 {
 case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
  {
   LPPOINT lpoint=new tagPOINT;
   ::GetCursorPos(lpoint);//得到鼠标位置
   CMenu menu;
   menu.CreatePopupMenu();//声明一个弹出式菜单
   //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已
   //隐藏),将程序结束。
   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://双击左键的处理
  {
   toTray(TRUE);      //这句则是使show为真 就是显示窗口
   //this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿 ,我们这儿不采用了
  }
  break;
 }
 return 0;
}

 

 

如果我写的有的地方 你不清楚的  你可以在网上查其它相关的  我这个只是对网上其它的一个优化 

原创粉丝点击