亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ntray.cpp

?? visual c++ 實例編程
?? CPP
字號:
//////////////////////////////////////////////////
//類名:CTrayNotifyIcon
//功能:系統(tǒng)區(qū)動態(tài)圖標(biāo)顯示效果
//修改人:徐景周(jingzhou_xu@163.net)
//組織:未來工作室(Future Studio)
//日期:2001.12.1
//////////////////////////////////////////////////
/////////////////////////////////  Includes  //////////////////////////////////
#include "stdafx.h"
#include "resource.h"
#include "ntray.h"
#include "BCMenu.h"          //加入位圖菜單支持
#include "TransparentWnd.h"

/////////////////////////////////  Macros /////////////////////////////////////

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

///////////////////////////////// Implementation //////////////////////////////

const UINT wm_TaskbarCreated = RegisterWindowMessage(_T("TaskbarCreated"));

IMPLEMENT_DYNAMIC(CTrayRessurectionWnd, CFrameWnd)

BEGIN_MESSAGE_MAP(CTrayRessurectionWnd, CFrameWnd)
	//{{AFX_MSG_MAP(CTrayRessurectionWnd)
	//}}AFX_MSG_MAP
  ON_REGISTERED_MESSAGE(wm_TaskbarCreated, OnTaskbarCreated)
END_MESSAGE_MAP()

LRESULT CTrayRessurectionWnd::OnTaskbarCreated(WPARAM wParam, LPARAM lParam)
{
  ASSERT(m_pTrayIcon);

  //Refresh the tray icon if necessary
  if (m_pTrayIcon->IsShowing())
  {
    m_pTrayIcon->HideIcon();
    m_pTrayIcon->ShowIcon();
  }

  return 0L;
}

CTrayRessurectionWnd::CTrayRessurectionWnd(CTrayNotifyIcon* pTrayIcon)
{
  //must have at valid tray notify instance
  ASSERT(pTrayIcon);

  //Store the values away
  m_pTrayIcon = pTrayIcon;
}


IMPLEMENT_DYNAMIC(CTrayTimerWnd, CFrameWnd)

BEGIN_MESSAGE_MAP(CTrayTimerWnd, CFrameWnd)
	//{{AFX_MSG_MAP(CTrayTimerWnd)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

CTrayTimerWnd::CTrayTimerWnd(CTrayNotifyIcon* pTrayIcon, HICON* phIcons, int nNumIcons, DWORD dwDelay)
{
  m_nCurrentIconIndex = 0;

  //must have a valid tray notify instance
  ASSERT(pTrayIcon);

  //must have at least 1 icon
  ASSERT(nNumIcons);

  //array of icon handles must be valid
  ASSERT(phIcons);

  //must be non zero timer interval
  ASSERT(dwDelay);

  //Store the values away
  m_pTrayIcon = pTrayIcon;

  m_phIcons = new HICON[nNumIcons];
  CopyMemory(m_phIcons, phIcons, nNumIcons * sizeof(HICON));
  m_nNumIcons = nNumIcons;
  m_dwDelay = dwDelay;
}

CTrayTimerWnd::~CTrayTimerWnd()
{
  if (m_phIcons)
  {
    delete [] m_phIcons;
    m_phIcons = NULL;
  }
}

int CTrayTimerWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
  //create the animation timer
	m_nTimerID = SetTimer(1, m_dwDelay, NULL);

	return 0;
}

void CTrayTimerWnd::OnDestroy() 
{
  //kill the animation timer
  KillTimer(m_nTimerID);

   CFrameWnd::OnDestroy();
}

void CTrayTimerWnd::OnTimer(UINT nIDEvent) 
{
  //increment the icon index
  ++m_nCurrentIconIndex;
  m_nCurrentIconIndex = m_nCurrentIconIndex % m_nNumIcons;

  //update the tray icon
  m_pTrayIcon->m_NotifyIconData.uFlags = NIF_ICON;
  m_pTrayIcon->m_NotifyIconData.hIcon = m_phIcons[m_nCurrentIconIndex];
  Shell_NotifyIcon(NIM_MODIFY, &m_pTrayIcon->m_NotifyIconData);
}




IMPLEMENT_DYNAMIC(CTrayNotifyIcon, CObject)

CTrayNotifyIcon::CTrayNotifyIcon()
{
  memset(&m_NotifyIconData, 0, sizeof(m_NotifyIconData));
  m_bCreated = FALSE;
  m_bHidden = FALSE;
  m_pNotificationWnd = NULL;
  m_pResurrectionWnd = NULL;
  m_pTimerWnd = NULL;
  m_bAnimated = FALSE;
}

CTrayNotifyIcon::~CTrayNotifyIcon()
{
  DestroyTimerWindow();
  DestroyResurrectionWindow();
  RemoveIcon();
}

void CTrayNotifyIcon::HideIcon()
{
  ASSERT(m_bCreated);
	if (!m_bHidden) 
  {
		m_NotifyIconData.uFlags = NIF_ICON;
		Shell_NotifyIcon(NIM_DELETE, &m_NotifyIconData);
		m_bHidden = TRUE;
	}
}

void CTrayNotifyIcon::ShowIcon()
{
  ASSERT(m_bCreated);
	if (m_bHidden) 
  {
		m_NotifyIconData.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
		Shell_NotifyIcon(NIM_ADD, &m_NotifyIconData);
		m_bHidden = FALSE;
	}
}

void CTrayNotifyIcon::RemoveIcon()
{
  if (m_bCreated)
  {
    m_NotifyIconData.uFlags = 0;
    Shell_NotifyIcon(NIM_DELETE, &m_NotifyIconData);
    m_bCreated = FALSE;
  }
}

void CTrayNotifyIcon::MoveToExtremeRight()
{
  HideIcon();
  ShowIcon();
}

BOOL CTrayNotifyIcon::Create(CWnd* pNotifyWnd, UINT uID, LPCTSTR pszTooltipText, HICON hIcon, UINT nNotifyMessage)
{
  //Create the ressurection window
  if (!CreateRessurectionWindow())
    return FALSE;

  //Make sure Notification window is valid
  ASSERT(pNotifyWnd && ::IsWindow(pNotifyWnd->GetSafeHwnd()));
  m_pNotificationWnd = pNotifyWnd;

  //Make sure we avoid conflict with other messages
  ASSERT(nNotifyMessage >= WM_USER);

  //Tray only supports tooltip text up to 64 characters
  ASSERT(_tcslen(pszTooltipText) <= 64);

  m_NotifyIconData.cbSize = sizeof(m_NotifyIconData);
  m_NotifyIconData.hWnd = pNotifyWnd->GetSafeHwnd();
  m_NotifyIconData.uID = uID;
  m_NotifyIconData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
  m_NotifyIconData.uCallbackMessage = nNotifyMessage;
  m_NotifyIconData.hIcon = hIcon;
  _tcscpy(m_NotifyIconData.szTip, pszTooltipText);

  BOOL rVal = Shell_NotifyIcon(NIM_ADD, &m_NotifyIconData);
  m_bCreated = rVal;

  return rVal;
}

BOOL CTrayNotifyIcon::CreateRessurectionWindow()
{
  //Create the resurrection window 
  ASSERT(m_pResurrectionWnd == NULL);
  m_pResurrectionWnd = new CTrayRessurectionWnd(this);
  if (!m_pResurrectionWnd)
    return FALSE;
  if (!m_pResurrectionWnd->Create(NULL, _T("CTrayNotifyIcon Resurrection Notification Window")))
    return FALSE;

  return TRUE;
}

void CTrayNotifyIcon::DestroyResurrectionWindow()
{
  if (m_pResurrectionWnd)
  {
    m_pResurrectionWnd->SendMessage(WM_CLOSE);
    m_pResurrectionWnd = NULL;
  }
}

BOOL CTrayNotifyIcon::CreateTimerWindow(HICON* phIcons, int nNumIcons, DWORD dwDelay)
{
  //create the hidden window which will contain the timer which will do the animation
  ASSERT(m_pTimerWnd == NULL); 
  m_pTimerWnd = new CTrayTimerWnd(this, phIcons, nNumIcons, dwDelay);
  if (!m_pTimerWnd)
    return FALSE;
  if (!m_pTimerWnd->Create(NULL, _T("CTrayNotifyIcon Animation Notification Window")))
    return FALSE;

  return TRUE;
}

void CTrayNotifyIcon::DestroyTimerWindow()
{
  if (m_pTimerWnd)
  {
    m_pTimerWnd->SendMessage(WM_CLOSE);
    m_pTimerWnd = NULL;
  }
}

BOOL CTrayNotifyIcon::Create(CWnd* pNotifyWnd, UINT uID, LPCTSTR pszTooltipText, HICON* phIcons, int nNumIcons, DWORD dwDelay, UINT nNotifyMessage)
{
  //must be using at least 1 icons
  ASSERT(nNumIcons >= 1);

  if (!CreateTimerWindow(phIcons, nNumIcons, dwDelay))
    return FALSE;

  //let the normal Create function do its stuff
  BOOL bSuccess = Create(pNotifyWnd, uID, pszTooltipText, phIcons[0], nNotifyMessage);
  m_bAnimated = TRUE;
  return bSuccess;
}

BOOL CTrayNotifyIcon::SetTooltipText(LPCTSTR pszTooltipText)
{
  if (!m_bCreated)
    return FALSE;

  m_NotifyIconData.uFlags = NIF_TIP;
  _tcscpy(m_NotifyIconData.szTip, pszTooltipText);

  return Shell_NotifyIcon(NIM_MODIFY, &m_NotifyIconData);
}

BOOL CTrayNotifyIcon::SetTooltipText(UINT nID)
{
  CString sToolTipText;
  VERIFY(sToolTipText.LoadString(nID));

  return SetTooltipText(sToolTipText);
}

BOOL CTrayNotifyIcon::SetIcon(HICON hIcon)
{
  if (!m_bCreated)
    return FALSE;

  DestroyTimerWindow();
  m_bAnimated = FALSE;
  m_NotifyIconData.uFlags = NIF_ICON;
  m_NotifyIconData.hIcon = hIcon;

  return Shell_NotifyIcon(NIM_MODIFY, &m_NotifyIconData);
}

BOOL CTrayNotifyIcon::SetIcon(LPCTSTR lpIconName)
{
  HICON hIcon = AfxGetApp()->LoadIcon(lpIconName);

  return SetIcon(hIcon);
}

BOOL CTrayNotifyIcon::SetIcon(UINT nIDResource)
{
  HICON hIcon = AfxGetApp()->LoadIcon(nIDResource);

  return SetIcon(hIcon);
}

BOOL CTrayNotifyIcon::SetStandardIcon(LPCTSTR lpIconName)
{
  HICON hIcon = LoadIcon(NULL, lpIconName);

  return SetIcon(hIcon);
}

BOOL CTrayNotifyIcon::SetStandardIcon(UINT nIDResource)
{
  HICON hIcon = LoadIcon(NULL, MAKEINTRESOURCE(nIDResource));

  return SetIcon(hIcon);
}

BOOL CTrayNotifyIcon::SetIcon(HICON* phIcons, int nNumIcons, DWORD dwDelay)
{
  ASSERT(nNumIcons >= 2);
  ASSERT(phIcons);

  if (!SetIcon(phIcons[0]))
    return FALSE;

  DestroyTimerWindow();
  if (!CreateTimerWindow(phIcons, nNumIcons, dwDelay))
    return FALSE;
  m_bAnimated = TRUE;

  return TRUE;
}

BOOL CTrayNotifyIcon::SetNotificationWnd(CWnd* pNotifyWnd)
{
  if (!m_bCreated)
    return FALSE;

  //Make sure Notification window is valid
  ASSERT(pNotifyWnd && ::IsWindow(pNotifyWnd->GetSafeHwnd()));

  m_pNotificationWnd = pNotifyWnd;
  m_NotifyIconData.hWnd = pNotifyWnd->GetSafeHwnd();
  m_NotifyIconData.uFlags = 0;

  return Shell_NotifyIcon(NIM_MODIFY, &m_NotifyIconData);
}

CString CTrayNotifyIcon::GetTooltipText() const
{
  CString sText;
  if (m_bCreated)
    sText = m_NotifyIconData.szTip;

  return sText;
}

HICON CTrayNotifyIcon::GetIcon() const
{
  HICON hIcon = NULL;
  if (m_bCreated)
  {
    if (m_bAnimated)
      hIcon = m_pTimerWnd->GetCurrentIcon();
    else
      hIcon = m_NotifyIconData.hIcon;
  }

  return hIcon;
}

CWnd* CTrayNotifyIcon::GetNotificationWnd() const
{
  return m_pNotificationWnd;
}

LRESULT CTrayNotifyIcon::OnTrayNotification(WPARAM wID, LPARAM lEvent)
{
  //Return quickly if its not for this tray icon
  if (wID != m_NotifyIconData.uID)
    return 0L;

  //As a default action use a menu resource with the same id 
  //as this was created with

  CMenu popmenu;
  if (!popmenu.LoadMenu(m_NotifyIconData.uID))
    return 0;

  //添加圖標(biāo)菜單
  CMenu * pSubMenu = popmenu.GetSubMenu(0);
  if (!pSubMenu) 
   return 0;

  if (lEvent == WM_RBUTTONUP) //||lEvent == WM_LBUTTONUP)
  {
    //鼠標(biāo)右鍵按下時,彈出相關(guān)菜單
	BCMenu popmenu;

	popmenu.LoadMenu(IDR_POPUP);
	BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP);
	
	//顯示選中時的復(fù)選框效果
	if(((CTransparentWnd*)AfxGetMainWnd())->GetFullScreenWalk())  
		popmenu.ModifyODMenu(NULL, IDR_FULLSCREEN_WALK,IDB_CHECK);
	if(((CTransparentWnd*)AfxGetMainWnd())->GetOptionMute())
		popmenu.ModifyODMenu(NULL, IDR_OPTION_MUTE,IDB_CHECK);
	if(((CTransparentWnd*)AfxGetMainWnd())->GetOptionTopShow())
		popmenu.ModifyODMenu(NULL, IDR_OPTION_TOPSHOW,IDB_CHECK);
	if(((CTransparentWnd*)AfxGetMainWnd())->GetOptionRest())
		popmenu.ModifyODMenu(NULL, IDR_OPTION_REST,IDB_CHECK);
	if(((CTransparentWnd*)AfxGetMainWnd())->GetAutorunFlag())
		popmenu.ModifyODMenu(NULL, IDR_AUTORUN,IDB_CHECK);
	if(((CTransparentWnd*)AfxGetMainWnd())->GetShowNewsFlag())
		popmenu.ModifyODMenu(NULL, IDR_SHOWNEWS,IDB_CHECK);

	BCMenu *psub = (BCMenu *)popmenu.GetSubMenu(0); 
	CPoint pos;
    GetCursorPos(&pos);
//	::SetMenuDefaultItem(psub->m_hMenu, 0, TRUE);
    ::SetForegroundWindow(m_NotifyIconData.hWnd);  
	psub->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x, pos.y,AfxGetApp()->m_pMainWnd);
	popmenu.DestroyMenu();

  } 
  else if (lEvent == WM_LBUTTONDBLCLK) 
  {
    // 鼠標(biāo)左鍵雙擊時,顯示或隱藏精靈助手
    if(!AfxGetMainWnd()->IsWindowVisible())  
	  ::SendMessage(m_NotifyIconData.hWnd, WM_COMMAND, pSubMenu->GetMenuItemID(0), 0);
    else
      ::SendMessage(m_NotifyIconData.hWnd, WM_COMMAND, pSubMenu->GetMenuItemID(0), 0);
  }

  return 1; // handled
}



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区二区国产| 亚洲图片有声小说| 国产69精品一区二区亚洲孕妇 | 九九在线精品视频| 日韩欧美二区三区| 国产成人福利片| 亚洲欧洲美洲综合色网| 色婷婷精品大在线视频| 丝袜国产日韩另类美女| 精品国产一区二区三区av性色| 国产很黄免费观看久久| 中文字幕一区二区三区四区不卡| 精品视频在线免费看| 国内一区二区视频| 亚洲视频一区在线| 欧美一区二区三区视频| 国产高清不卡一区| 亚洲电影在线播放| 久久久久久亚洲综合影院红桃| 一本色道久久综合亚洲精品按摩| 日韩精品午夜视频| 国产精品传媒入口麻豆| 91麻豆精品国产自产在线观看一区| 精品一区二区久久久| 亚洲色图视频免费播放| 日韩欧美亚洲国产另类 | 国产精品一区二区久久精品爱涩| 国产精品看片你懂得| 538prom精品视频线放| 国产999精品久久| 五月开心婷婷久久| 欧美国产一区视频在线观看| 51精品国自产在线| 99在线精品免费| 麻豆精品久久精品色综合| 亚洲欧美在线另类| wwwwxxxxx欧美| 在线成人午夜影院| 91香蕉视频在线| 国产在线一区观看| 午夜av一区二区三区| 亚洲天堂久久久久久久| 久久精品一区二区三区不卡| 8x8x8国产精品| 91小视频免费观看| 国产伦精品一区二区三区免费迷| 亚洲午夜免费福利视频| 中文字幕一区在线| 国产欧美日韩不卡免费| 欧美sm美女调教| 538在线一区二区精品国产| 色88888久久久久久影院野外| 国产成人午夜精品影院观看视频 | 香蕉av福利精品导航| 中文字幕一区二区三区色视频| 精品毛片乱码1区2区3区| 欧美三片在线视频观看| 在线免费亚洲电影| 99视频有精品| 99久久精品久久久久久清纯| 丰满亚洲少妇av| 国产精品影视在线| 国产精品一区专区| 国模大尺度一区二区三区| 免费高清在线一区| 美脚の诱脚舐め脚责91| 日韩av午夜在线观看| 三级一区在线视频先锋| 亚洲狠狠丁香婷婷综合久久久| 亚洲色欲色欲www在线观看| 中文字幕av一区二区三区高| 国产精品免费看片| 国产精品日日摸夜夜摸av| 亚洲国产高清在线观看视频| 中文字幕不卡一区| 中文字幕一区二区三区精华液 | 日韩午夜av一区| 日韩视频在线观看一区二区| 日韩一二在线观看| 亚洲精品一线二线三线| 久久精品视频网| 国产精品丝袜一区| 亚洲视频在线观看三级| 一区二区免费在线播放| 天堂蜜桃一区二区三区| 美女视频第一区二区三区免费观看网站| 青青草视频一区| 久久99精品久久久久久久久久久久| 激情图区综合网| 成人一道本在线| 色婷婷久久一区二区三区麻豆| 欧美日韩亚洲综合一区二区三区| 欧美日本高清视频在线观看| 日韩欧美第一区| 日本一区二区三区免费乱视频 | 一本大道av伊人久久综合| 在线免费观看日本欧美| 777午夜精品免费视频| 日韩女优视频免费观看| 国产午夜精品久久久久久久 | 久久久久久久精| 亚洲素人一区二区| 日韩经典中文字幕一区| 国产一区91精品张津瑜| 97se亚洲国产综合自在线 | 国产尤物一区二区在线| www.一区二区| 69成人精品免费视频| 国产女人18毛片水真多成人如厕| 一区二区三区精品视频| 久久99久久精品欧美| 91视频.com| 久久夜色精品国产噜噜av| 亚洲美女视频在线| 韩国精品久久久| 色天天综合久久久久综合片| 日韩三级.com| 亚洲人成小说网站色在线 | 免费三级欧美电影| 成人av电影免费在线播放| 欧美二区乱c少妇| 国产精品网站在线播放| 日本vs亚洲vs韩国一区三区二区 | 欧亚一区二区三区| 久久久久久9999| 日韩电影在线免费观看| 老司机午夜精品| 国产精一品亚洲二区在线视频| 91丨九色porny丨蝌蚪| 欧美一区二区在线视频| 国产精品毛片久久久久久| 天使萌一区二区三区免费观看| 成人丝袜18视频在线观看| 日韩亚洲电影在线| 亚洲视频图片小说| 国产精品18久久久久久久久| 欧美午夜免费电影| 综合中文字幕亚洲| 国产在线视频不卡二| 精品视频一区二区不卡| 亚洲欧洲日产国码二区| 国产精品91一区二区| 日韩欧美国产一二三区| 五月婷婷激情综合网| 色综合天天综合| 国产精品高潮呻吟| 国产精品一二三四| 精品美女一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 欧美性猛交xxxx乱大交退制版| 中文字幕亚洲在| 成人高清免费在线播放| 国产日韩欧美精品电影三级在线 | 天堂一区二区在线| 欧美吞精做爰啪啪高潮| 夜夜嗨av一区二区三区中文字幕| 成人免费看视频| 国产亚洲自拍一区| 国产美女一区二区三区| 欧美精品一区男女天堂| 久久99精品久久久久久久久久久久| 制服丝袜成人动漫| 三级久久三级久久| 69堂精品视频| 蜜臀a∨国产成人精品| 日韩欧美国产小视频| 久久99国内精品| 久久久www成人免费毛片麻豆 | 免费观看30秒视频久久| 91精品国产91久久久久久一区二区 | 欧美激情综合在线| www.日韩大片| 亚洲精品国产成人久久av盗摄| 色婷婷精品大在线视频| 亚洲最大的成人av| 欧美日韩高清影院| 麻豆精品一二三| 国产亚洲欧美中文| 91在线免费视频观看| 亚洲免费观看视频| 国产成人一区在线| 日韩一区中文字幕| 欧美午夜影院一区| 蜜臀av性久久久久av蜜臀妖精| 精品国产一区二区亚洲人成毛片| 国产精品白丝jk黑袜喷水| 亚洲欧美一区二区在线观看| 欧美在线一区二区三区| 日产国产欧美视频一区精品| 精品国产sm最大网站| 成人avav在线| 日韩电影网1区2区| 国产欧美精品一区二区色综合| 色婷婷激情一区二区三区| 日本亚洲电影天堂| 国产精品传媒在线| 欧美一区二区网站| 丁香啪啪综合成人亚洲小说| 亚洲一区在线观看免费| 2023国产精品|