MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现

3 篇文章 0 订阅
2 篇文章 0 订阅
还是因为无聊,下面把 提示对话框的滑动弹出 程序图标加入系统托盘的实现 的效果先看下
MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现

MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现

MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现
这个就是简单的效果,下面把实现的过程简单说一下:
1. 提示对话框的滑动弹出:
首先自己添加个资源---提示对话框,下面就是怎样在响应消失时从桌面右下角滑动的显示出来:
void CMyDlg:: OnButtonTishi() 
{
// TODO: Add your control notification handler code here

DWORD flag = AW_SLIDE | AW_VER_NEGATIVE;
::AnimateWindow(m_nTestDlg.GetSafeHwnd(),1000,flag);
MessageBox("右下角出现提示对话框");
Sleep(1000);
flag = AW_SLIDE | AW_VER_POSITIVE | AW_HIDE;
::AnimateWindow(m_nTestDlg.GetSafeHwnd(),1000,flag);
}
BOOL CMyDlg::OnInitDialog()中添加如下代码:
m_nTestDlg.Create(IDD_DIALOG_TEST);
CRect rcClient,rcWindow;
m_nTestDlg.GetClientRect(&rcClient);
::GetClientRect(::GetDesktopWindow(),&rcWindow);
::SetWindowPos(m_nTestDlg.GetSafeHwnd(),HWND_TOPMOST,
rcWindow.right - rcClient.Width(),
rcWindow.bottom - rcClient.Height(),
0,0,SWP_NOSIZE);
按照上面的步骤做完的时候,可能提示下面的错误:
MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现
不急,这是windows系统版本的问题,简单一句代码搞定:
stdafx.h中添加:
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#define WINVER 0x0500
好了,你可以炫一下你自己的提示对话框了。。

下面说一下系统托盘图标的实现:
1.用visual c++新建一个基于对话框的应用程序,假设名字为Test。
2.在CTestDlg.cpp文件中加入:
  #define WM_NOTIFYICON WM_USER+1
  NOTIFYICONDATA nld;
3.在CTestDlg.h文件的CTestDlg类中添加消息响应函数的声明:
  LONG OnNotifyIcon(WPARAM wParam, LPARAM lParam);
4.在CTestDlg.cpp文件的消息映射部分加入
  ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)
5.添加一个菜单资源,假设名为IDR_MENU1
  该菜单有一个名为“菜单”的子菜单,其下的菜单项为“显示”(ID_SHOW)和“隐藏”(ID_HIDE)以及“退出”(ID_EXIT)
6.为该菜单添加响应函数
  分别为“显示”“隐藏”“退出”添加OnShow(),OnHide(),OnExit()函数,如下
void CTestDlg::OnShow() 
{
// TODO: Add your command handler code here
ShowWindow( SW_SHOWNORMAL);
}
void CbackdropDlg::OnExit() 
{
::PostQuitMessage(WM_QUIT);
}
void CTestDlg::OnHide() 
{
// TODO: Add your command handler code here
ShowWindow(SW_HIDE);
}
7.在CTestDlg.cpp文件中实现OnNotifyIcon函数:
  // 响应在托盘图标上的点击
LONG CInformationSaverDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
       //wParam是响应消息的图标ID,lParam中是Windows消息
{
        CMenu menu;
        switch(lParam)
        {
          case WM_RBUTTONDOWN: //在托盘图标上单击鼠标右键
          {
              if (menu.LoadMenu(IDR_MENU1))      
              {
                CMenu* pPopup = menu.GetSubMenu(0);
CPoint point;
   if (IsWindowVisible()) //如果窗口没有隐藏
{
pPopup->EnableMenuItem(IDC_SHOW,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
}
else
pPopup->EnableMenuItem(IDC_HIDE,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
GetCursorPos(&point); //获得鼠标位置
                SetForegroundWindow(); //显示窗口
                pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,this);
            }
        }
        break;
case WM_LBUTTONDOWN:
OnShow(); //显示窗口
break;
    }
    return 0;
}
8.在OnInitDialog()函数中加入:
  nld.cbSize=sizeof(NOTIFYICONDATA);
  nld.hWnd=m_hWnd; //当前窗口将收到托盘图标发出的消息
  nld.uID=IDR_MAINFRAME;
  nld.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;//nld 的成员hIcon,uCallbackMessage,szTip有效
  nld.uCallbackMessage=WM_NOTIFYICON;//用鼠标对托盘中的图标的操作发出消息WM_NOTIFYICON
  nld.hIcon=m_hIcon; //托盘中的图标为m_hIcon,注意,这里的m_hIcon是事先加载了图标的
  strcpy(nld.szTip, "我的托盘"); //鼠标放在托盘图标上时显示的文字
  Shell_NotifyIcon(NIM_ADD, &nld); //添加图标到状态栏
9.为主对话框添加消息响应OnDestroy()
  void CTestDlg::OnDestroy() 
{
CDialog::OnDestroy();
     Shell_NotifyIcon(NIM_DELETE, &nld);
}
看到了网上的一个总结,觉得不错,就Copy过来了:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值