首页
登录 | 注册

给托盘添加右击菜单--变化的背景图

给托盘添加右击菜单--变化的背景图

南京航空航天大学 张庆利

下载本文示例工程

图1 变化的背景图

给托盘添加右击菜单

  一般的商业程序都有托盘图标和在托盘上弹出右击菜单的功能,那么如何给自已的程序添加这样的功能呢?本文通过改变背景图的实例,介绍一种实现托盘上弹出右击菜单的方法。

一、添加托盘图标

给程序添加托盘图标的方法在很多VC书中都有实例,通常在程序中按下面的步骤就可以实现:

1、在XXDlg.CPP文件头部加入

#define WM_NOTIFYICONWM_USER 5   

NOTIFYICONDATA nd;

2、在程序的初始化中加入下面代码


nd.cbSize= sizeof (NOTIFYICONDATA);

nd.hWnd= m_hWnd;

nd.uID= IDR_MAINFRAME;

nd.uFlags= NIF_ICON|NIF_MESSAGE|NIF_TIP;

nd.uCallbackMessage= WM_NOTIFYICON;

nd.hIcon= m_hIcon;

strcpy(nd.szTip, "我的托盘");

Shell_NotifyIcon(NIM_ADD, &nd);      
3、在程序的退了函数中加入删除托盘图标语句

Shell_NotifyIcon(NIM_DELETE, &nd); 
二、在资源中添加菜单

1、建立菜单

图2 菜单

2、建立菜单对应的函数


void CbackdropDlg::OnShow()

{

   ShowWindow( SW_SHOWNORMAL);//恢复正常显示

}



void CbackdropDlg::OnExit()

{

   ::PostQuitMessage(0); //退出

}

void CbackdropDlg::OnHide()

{

   ShowWindow(SW_HIDE);//隐藏

}



void CbackdropDlg::OnMin()

{

   ShowWindow(SW_SHOWMINIMIZED);//最小化

}

三、添加响应函数

1、在类中加入托盘消息响应函数


LONG CbackdropDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)      
2、手中添加消息映射

//}}AFX_MSG_MAP

ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)//手工添加消息映射

END_MESSAGE_MAP()       
3、在托盘消息响应函数中添加代码

LONG CbackdropDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)

{

	// 响应在托盘图标上的单击

	//wParam中是响应消息的图标ID,lParam中则是Windows的消息

	// The backdrop icon sent us a message.  Let''s see what it is

    switch ( lParam )

    {

	case WM_RBUTTONDOWN:

		{

		    // 用户在托盘图标上单击鼠标右键,弹出菜单	

			CMenu pMenu;

			if (pMenu.LoadMenu(IDR_MENU1))

			{

				CMenu* pPopup = pMenu.GetSubMenu(0);

				ASSERT(pPopup != NULL);

				CPoint Point;

				if(IsIconic()) pPopup->EnableMenuItem(IDC_MIN,MF_BYCOMMAND | 

					                             MF_DISABLED | MF_GRAYED);

				if (IsWindowVisible())// 根据对话框窗口的状态对相关菜单项使能

				{

					if(!IsIconic())

						pPopup->EnableMenuItem(IDC_SHOW,MF_BYCOMMAND | 

						                       MF_DISABLED | MF_GRAYED);

				}

				else

					pPopup->EnableMenuItem(IDC_HIDE,MF_BYCOMMAND | 

					                                MF_DISABLED | MF_GRAYED);

				if (bkbmp)// 根据对话框背景图状态改变菜单名称

					pMenu.ModifyMenu(IDC_FIX,MF_STRING,IDC_FIX,"变化背景");

				else

					pMenu.ModifyMenu(IDC_FIX,MF_STRING,IDC_FIX,"固定背景)");

				// 确定鼠标位置以便在该位置附近显示菜单

				GetCursorPos( &Point );

				SetForegroundWindow();

				pPopup->TrackPopupMenu(

					TPM_LEFTALIGN | TPM_RIGHTBUTTON,

					Point.x, Point.y, this);?

			}

		}

		break;

	case WM_LBUTTONDBLCLK:

	case WM_LBUTTONDOWN:

		// OnShow();

		break;

    }

    return 0;

}      
结束语
  自本人有幸找到VCKBASE以来的大半年里得到了论坛中的众多高手指点,收益匪浅,所以想为VCKBASE论坛做点什么,因本人水平较低,故只能将在VCKBASE论坛中现学会的关于托盘右击菜单的方法结合变化背景图实例向大家汇报一下。要进一步了解背景图的内容请参考背景图实例中代码,如想了解更多的托盘资料请参考本站有关文章和实例。由于时间、水平限制,缺点和不足之处在所难免,敬请各位高手多多批评指正.。在此再一次对本论坛和在论坛中对我提供帮助的众多高手深深表示感谢!

相关文章

  • QT下如何添加net-snmp库进行开发
    修改工程下的.pro文件,添加如下内容 其中添加的-lrt选项是由于利用交叉编译工具进行编译时,会提示undefined reference to 'clock_gettime',该问题是由于在链接时没有链接librt库导致的,添加该选项即 ...
  • ROS 导航定位调试过程及costmap中添加障碍物 https://blog.csdn.net/m0_37672916/article/details/76604978 
  • C# 如何添加Word页眉、页脚
    本篇文章将介绍如何通过使用类库Free Spire.Doc for .NET来添加Word页眉页脚 文章转载自博客http://www.cnblogs.com/Yesi/p/8514309.html 工具使用:在项目程序中添加引用Spire ...
  • 微信程序开发系列教程(四)使用微信API创建公众号自定义菜单
    这篇教程就教大家如何动手做一做. 那么用什么API创建这些自定义菜单呢?微信公众号平台技术文档中,点击"自定义菜单": 文档里给了创建自定义菜单需要维护参数的HTTPpost报文的格式: 回到我的例子,我用postman ...
  • 为了让用户控件能ASP.NET页面实现动态添加,首先写一个接口IGetUCable,这个接口有一个函数,返回对象类型是UserControl.健康知识平台重庆妇科炎症        View Code        using System ...
  • 用户可以在Spread组件中添加一个或者几个工作表.默认情况下,组件只有一个工作表,名为Sheet 1,工作表引用索引为0.工作表索引是从零开始.用户可以通过代码简单地改变工作表数或添加工作表.如果您正在使用自定义工作表,一定要指定表的名称 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.013 s.
京ICP备10005923号