VC编程制作系统托盘程序

Windows操作系统中的某些程序运行时不显示运行窗口,只在任务栏上显示一个图标,表示程序正在运行,用户可以通过鼠标与应用程序交互,比如金山毒霸等应用程序,我们有时也需要编制一些仅在后台运行的类似程序,为了不干扰前台程序的运行界面和不显示不必要的窗口,应使程序运行时的主窗口不可见。同时将一个图标显示在任务栏右端静态通告区中并响应用户的鼠标动作。下面介绍Visual C++开发这类程序的设计方法。

  一、隐藏程序的主窗口

  首先,要使程序的主窗口不可见,并且不在任务栏上出现任务按钮,要做到这两点,需分别设置主边框窗口的风格和扩展风格:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
 cs.style =WS_POPUP;//使主窗口不可见
 cs.dwExStyle |=WS_EX_TOOLWINDOW;//不显示任务按钮
 return CFrameWnd::PreCreateWindow(cs);
}


  二、将表示程序运行的图标加入任务栏

  在主框架窗口的CMainFrame::OnCreate()函数中调用上述函数,就可以在任务条上显示图标这一步是利用系统API函数Shell_NotifyIcon()将一个图标显示在任务栏的通告区中。该函数的原型为:在调用该函数之前,需要确定其参数的取值。其中Shell_NotifyIcon()函数的第一个参数是一个预定义的消息,可以取如下值之一:NIM_ADD、NIM_DELETE或NIM_MODIFY,分别表示添加图标、删除图标或修改图标。另一个参数为指向NOTIFYICONDATA类型的指针。其原型为:

typedef struct _NOTIFYICONDATA {
 DWORD cbSize;
 HWND hWnd;
 UINT uID;
 UINT uFlags;
 UINT uCallbackMessage;
 HICON hIcon;
 charszTip[64]; }
NOTIFYICONDATA


  在该结构的成员中,cbSize为该结构所占的字节数,hWnd为接受该图标所发出的消息的窗口的句柄(鼠标在任务栏上程序图标上动作时图标将发出消息,这个消息用户要自己定义),uID为被显示图标的ID,uFlags指明其余的几个成员(hIcon、uCallBackMessage和szTip)的值是否有效,uCallbackMessage为一个用户自定义的消息,当用户在该图标上作用一些鼠标动作时,图标将向应用程序的主框架窗口(hWnd成员中指定的窗口)发出该消息,。hIcon为将在任务栏上被显示图标的句柄,szTip鼠标停留在该图标上时显示的字符串。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 NOTIFYICONDATA tnd;
 tnd.cbSize=sizeof(NOTIFYICONDATA);
 tnd.hWnd=this->m_hWnd;
 tnd.uID=IDR_MAINFRAME;
 tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
 tnd.uCallbackMessage=WM_MYMESSAGE;
 file://用户自定义的消息,即鼠标在任务栏上程序图标上动作时图标发送的消息
 tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
 strcpy(tnd.szTip,"测试程序");//图标提示为"测试程序"
 Shell_NotifyIcon(NIM_ADD,&tnd);//向任务栏添加图标
}三、用户与程序交互的实现

  用户进行交互,也就是当用户在该图标上单击或双击鼠标左键或右键时要执行相应的操作,至少也要响应用户终止该程序的意愿。上面已经提到,当用户在图标上进行鼠标动作时,将向hWnd成员中指定的窗口发出自定义的消息,该消息为uCallbackMessage成员所指定的WM_MYESSAGE,取值为WM_USER+101(如何自定义消息,我就不多说了)。我们要实现任务就是在hWnd窗口中响应该自定义消息:

void CMainFrame::OnMYMESSAGE(WPARAM wParam,LPARAM lParam)
{
 UINT uID;//发出该消息的图标的ID
 UINT uMouseMsg;//鼠标动作
 POINT pt;
 uID=(UINT) wParam;
 uMouseMsg=(UINT) lParam;
 if(uMouseMsg==WM_RBUTTONDOWN)//如果是单击右键
 {
  switch(uID)
  {
  case IDR_MAINFRAME://如果是我们的图标
   GetCursorPos(&pt);//取得鼠标位置
   AfxGetApp( )-> m_pMainWnd->ShowWindow(SW_SHOWNORMAL);//显示程序窗口
   break;
   default:
  }
 }
 return;
}
 
  四、程序结束时删除程序图标

  当程序结束时,需要删去通告区中的图标,这时还应该调用Shell_NotifyIcon函数,只不过第一个参数是表示删除图标的NIM_DELETE了:

void CMainFrame::~CmainFrame()
{
 NOTIFYICONDATA tnid;
 tnid.cbSize=sizeof(NOTIFYICONDATA);
 tnid.hWnd=this->m_hWnd;
 tnid.uID=IDR_MAINFRAME;//保证删除的是我们的图标
 Shell_NotifyIcon(NIM_DELETE,&tnid);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 雷达目标跟踪是指利用雷达技术获取目标的运动状态,并通过计算机算法在雷达图像中对目标进行跟踪。对于目标跟踪的实现,VC编程是一种常用的编程语言,可用于实现图像处理和计算机视觉算法。 VC编程是一种C++语言的变体,拥有许多图形操作函数和库,使其具有方便快捷的图像处理能力。在雷达目标跟踪方面,VC可以对雷达获得的目标信息进行处理,提取目标运动状态信息,并进行目标跟踪。 VC编程还提供了强大的计算机视觉算法库,包括卡尔曼滤波器、粒子滤波器、背景减除等算法。这些算法可以用于提高雷达目标跟踪的精度和实时性。 总之,VC编程是一种强大的编程语言,可以为雷达目标跟踪提供可靠的技术支持。通过VC编程实现雷达目标跟踪,可以提高目标检测和跟踪的精度和效率,为实现精确的雷达指挥控制提供有力保障。 ### 回答2: 雷达目标跟踪是指利用雷达技术对目标的运动状态进行跟踪,以实现目标的识别、定位和追踪等任务。在雷达目标跟踪中,可以采用各种算法和技术,如卡尔曼滤波、粒子滤波、神经网络等,来实现目标的跟踪。 其中,vc编程是一种常用的编程语言,可以应用于实现雷达目标跟踪功能。通过vc编程语言,可以实现数据处理、算法设计、界面设计等功能,使得雷达目标跟踪系统具有更高的可靠性和灵活性。在vc编程中,常用的开发平台包括VC++、MFC、QT等,可以根据具体需求选择合适的平台进行开发。 在实现雷达目标跟踪的过程中,vc编程可以帮助开发人员将雷达数据处理、目标检测、目标识别、追踪等功能进行集成,同时还能通过图形化界面展示和处理数据。此外,通过优化算法和程序设计,还可以提高系统的运行效率和稳定性,满足不同应用场景的需求。 综上所述,雷达目标跟踪vc编程是一个精细和复杂的过程,需要综合运用雷达技术、算法设计和vc编程等知识。只有通过对相关技术熟练掌握和实践,才能构建出高效、可靠和可控的雷达目标跟踪系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值