利用Visual C++实现系统托盘程序)4(

来源:互联网 发布:淘宝拍拍贷满标可靠吗 编辑:程序博客网 时间:2024/05/17 22:52
导读:
  /////////////////////////////////////////////////////////////////////////////
  // CMainFrame diagnostics
  #ifdef _DEBUG
  void CMainFrame::AssertValid() const
  {
  CFrameWnd::AssertValid();
  }
  void CMainFrame::Dump(CDumpContext& dc) const
  {
  CFrameWnd::Dump(dc);
  }
  #endif //_DEBUG
  ///////////////////////////////////////////////////////////////
  BOOL CMyApp::InitInstance()
  {
  //在应用程序初始化函数中将程序的主框架隐藏起来;
  #ifdef _AFXDLL
  Enable3dControls(); // Call this when using MFC in a shared DLL
  #else
  Enable3dControlsStatic(); // Call this when linking to MFC statically
  #endif
  SetRegistryKey(_T("Local AppWizard-Generated Applications"));
  CMainFrame* pFrame = new CMainFrame;
  m_pMainWnd = pFrame;
  pFrame->LoadFrame(IDR_MAINFRAME,
  WS_OVERLAPPEDWINDOW   FWS_ADDTOTITLE, NULL, NULL);
  pFrame->ShowWindow(SW_HIDE);
  pFrame->UpdateWindow();
  return TRUE;
  }
  四、小结
  托盘程序的信息提示通常是将鼠标光标移到托盘图标上之后,Windows会发送消息给托盘程序,从而显示提示信息--Tooltip。但在Windows XP中我们还看到有些系统托盘程序是自动显示ToolTips信息的,也就是说不用将鼠标光标移到托盘图标上便可显示ToolTips,此类新式的信息提示一般称为气球提示,它是由你的程序来控制显示。气球提示为托盘程序提供了一种非打扰式的方法通知用户发生了某件事情。但是如何让气球提示显示出来呢?其实所有的托盘图标行为都是通过一个单纯的API函数Shell_NotifyIcon来操作的。你可以利用这个函数的参数NOTIFYICONDATA结构,这个结构来告诉Windows你想要做什么。下面是这个结构的定义的最新版本(For IE5.0+),其中已经加入了新的成员:
  typedef struct _NOTIFYICONDATA {
  DWORD cbSize;
  HWND hWnd;
  UINT uID;
  UINT uFlags;
  UINT uCallbackMessage;
  HICON hIcon;
  #if (_WIN32_IE <0x0500)
  WCHAR szTip[64];
  #else
  WCHAR szTip[128];
  #endif
  #if (_WIN32_IE >= 0x0500)
  DWORD dwState;
  DWORD dwStateMask;
  WCHAR szInfo[256];
  union {
  UINT uTimeout;
  UINT uVersion;
  } DUMMYUNIONNAME;
  WCHAR szInfoTitle[64];
  DWORD dwInfoFlags;
  #endif
  } NOTIFYICONDATA, *PNOTIFYICONDATA;
  在NOTIFYICONDATA.uFlags中的标志之一是NIF_TIP,用它来设置传统的信息提示,即鼠标要移动到图标上。新的标志NIF_INFO(由于_WIN32_IE >= 0x0500条件定义,因此在编译时,请注意包含最新版本的头文件shellapi.h,并保证链接最新版本的库文件shell32.lib,分发程序时用最新版本的运行时动态链接库shell32.dll)便是为显示气球提示所用的。也就是说,要显示气球提示,那么在调用Shell_NotifyIcon函数时必须用NIF_INFO标志。提示文本填入szInfo域,标题文本填入szInfoTitle。你甚至可以在NOTIFYICONDATA.uTimeout中设置一个超时时间,当经过指定的毫秒数之后,气球提示自动隐藏。

本文转自
http://tech.163.com/06/0628/09/2KMPTBE40009159Q_4.html
原创粉丝点击