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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ntray.cpp

?? 一個功能挺多的
?? CPP
字號:
//
//Modify by 徐景周 2000.10
//功能:系統區動態圖標顯示效果
//


/////////////////////////////////  Includes  //////////////////////////////////
#include "stdafx.h"
#include "resource.h"
#include "ntray.h"
#include "CBmpMenu.h"  //菜單左邊加入長條位圖
#include "TransparentWnd.h"

//
//Modify by 徐景周 2000.10
//功能:系統區動態圖標顯示
//

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

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


///////////////////////////////// Implementation //////////////////////////////
CTransparentWnd *pWnd; //CTransparentWnd類窗體指針

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 2 icons
  ASSERT(nNumIcons >= 2);

  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;
    //添加圖標菜單

  CMenu * pSubMenu = popmenu.GetSubMenu(0);
  if (!pSubMenu) 
   return 0;
 

  if (lEvent == WM_RBUTTONUP)
  {
    //Clicking with right button brings up a context menu

    // Make first menu item the default (bold font)
 /*
  ::SetMenuDefaultItem(pSubMenu->m_hMenu, 0, TRUE);

    //Display and track the popup menu
    CPoint pos;
    GetCursorPos(&pos);
    ::SetForegroundWindow(m_NotifyIconData.hWnd);  
    ::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0, m_NotifyIconData.hWnd, NULL);
 */  

    //在系統區菜單左邊添加長條位圖(用于彈出式菜單)
  HBITMAP hBitmap = LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_BAR));

	CString	m_csWidth;
	int		m_nStretch;
	BOOL	m_bShowBmp;
	BOOL	m_bShow4All;

	m_csWidth = CString("23");
	m_nStretch = 0;
	m_bShowBmp = TRUE;
	m_bShow4All = TRUE;


	CBmpMenu oMenu(atoi(m_csWidth.GetBuffer(0)), m_bShow4All, m_bShowBmp?hBitmap:0, (m_nStretch==0)?TRUE:FALSE);

	oMenu.LoadMenu(IDR_POPUP);

	 CBitmap bmp;	
	 if(pWnd->GetMuteFlag ()) //根據是否選中靜音標志來替換位圖顯示
	   bmp.LoadBitmap(IDB_CHECKED1);    
	 else
       bmp.LoadBitmap(IDB_CHECK1);   
	 oMenu.SetMenuItemBitmaps( 5, MF_BYPOSITION, &bmp, &bmp);

	CPoint pt;
	GetCursorPos(&pt);
	 //刪除第一級下拉菜單,只顯示第二級及以下菜單彈出菜單
	oMenu.DeleteMenu ( 0 ,MF_BYPOSITION );
	oMenu.DrawMenuBar ();
    oMenu.TrackPopupMenu(0, pt.x, pt.y, AfxGetApp()->m_pMainWnd );
  } 
  else if (lEvent == WM_LBUTTONDBLCLK) 
  {
    // double click received, the default action is to execute first menu item
    if(!pWnd->GetShowPetFlag())  //同步獲取的顯示標志位為真顯示寵物,為假不顯示
	  ::SendMessage(m_NotifyIconData.hWnd, WM_COMMAND, pSubMenu->GetMenuItemID(0), 0);
    else
      ::SendMessage(m_NotifyIconData.hWnd, WM_COMMAND, pSubMenu->GetMenuItemID(0), 0);
  }

  return 1; // handled
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜国产不卡在线观看视频| 天天av天天翘天天综合网色鬼国产 | 亚洲国产精品久久久男人的天堂 | 国产午夜精品久久久久久免费视| 一本大道久久a久久综合| 美女脱光内衣内裤视频久久影院| 国产精品久久久一本精品| 91 com成人网| 日本韩国精品在线| 国产一二精品视频| 日韩中文字幕91| 夜夜嗨av一区二区三区中文字幕 | 中文字幕av一区二区三区| 欧美高清视频不卡网| www.综合网.com| 国产美女一区二区三区| 视频一区欧美日韩| 伊人色综合久久天天| 国产三级一区二区| 欧美mv日韩mv国产网站app| 欧美视频在线观看一区| 色综合欧美在线视频区| 成人一区二区三区视频在线观看| 免费一级片91| 亚洲成av人片一区二区梦乃| 亚洲另类中文字| 亚洲欧洲av色图| 国产香蕉久久精品综合网| 日韩免费电影网站| 91麻豆精品国产91久久久使用方法 | 欧美精品免费视频| 欧美色大人视频| 色先锋aa成人| 91麻豆免费在线观看| 不卡一区二区在线| 福利视频网站一区二区三区| 国产精品综合网| 国产乱理伦片在线观看夜一区| 久久99国产精品久久99果冻传媒| 秋霞电影一区二区| 三级在线观看一区二区 | 成人动漫av在线| 成人精品电影在线观看| 粗大黑人巨茎大战欧美成人| 国产福利一区在线观看| 成人晚上爱看视频| av电影在线观看完整版一区二区| 成人av电影免费观看| av在线这里只有精品| 97精品超碰一区二区三区| 91蜜桃在线免费视频| 欧美性一区二区| 日韩欧美亚洲另类制服综合在线| 欧美一级久久久久久久大片| 欧美一区二区精品久久911| 欧美一区日韩一区| 精品理论电影在线| 中文字幕国产精品一区二区| 亚洲人成人一区二区在线观看 | 欧美一区二区三区成人| 欧美一级欧美三级在线观看| 精品少妇一区二区| 久久精品亚洲精品国产欧美kt∨ | 99国产精品久久久| 在线观看亚洲成人| 日韩午夜av一区| 国产日产欧美一区二区视频| 国产精品久久777777| 一区二区三区国产| 美女mm1313爽爽久久久蜜臀| 国产高清成人在线| 欧洲视频一区二区| 精品国产亚洲在线| 亚洲女厕所小便bbb| 日韩av在线发布| 成人一区二区在线观看| 欧美卡1卡2卡| 亚洲国产精品精华液ab| 午夜精品久久久久久久99水蜜桃| 久久电影网站中文字幕| k8久久久一区二区三区| 欧美伦理电影网| 欧美激情中文不卡| 亚洲成人福利片| 国产精品一区二区无线| 欧美主播一区二区三区| 久久久噜噜噜久久人人看 | 亚洲一区二区在线视频| 久久不见久久见免费视频7| 99久久久久免费精品国产 | 色狠狠一区二区三区香蕉| 日韩一区二区三区三四区视频在线观看| 久久亚洲一区二区三区明星换脸| 亚洲美女精品一区| 久久精品国产精品亚洲红杏| 色婷婷国产精品| 久久综合狠狠综合久久综合88| 一区二区三区四区精品在线视频| 欧美日精品一区视频| 国产清纯美女被跳蛋高潮一区二区久久w| 一区二区三区影院| 成人av一区二区三区| 日韩一区二区三区免费看 | 亚洲国产电影在线观看| 青青草国产精品97视觉盛宴| 色综合久久中文综合久久97| 久久久久久电影| 亚洲大片精品永久免费| 成人一区二区三区视频| 欧美精品一区二| 全国精品久久少妇| 91激情在线视频| 国产精品久久久久精k8| 九色porny丨国产精品| 欧美裸体一区二区三区| 亚洲一区二区三区四区在线 | 久久99久久精品| 欧美天堂一区二区三区| 亚洲国产高清aⅴ视频| 激情综合一区二区三区| 欧美一区二区三区免费视频| 亚洲国产美女搞黄色| 色综合天天性综合| 国产精品欧美一级免费| 国产高清久久久| 久久久青草青青国产亚洲免观| 久久99精品久久久| 日韩免费高清av| 免费高清视频精品| 日韩一区二区免费高清| 青青草97国产精品免费观看无弹窗版 | 美女一区二区三区| 日韩欧美国产综合一区| 日韩av不卡在线观看| 69精品人人人人| 一区二区欧美精品| 欧美三级在线看| 天天亚洲美女在线视频| 欧美精品日日鲁夜夜添| 一区二区视频在线| 色老汉一区二区三区| 亚洲国产成人高清精品| 欧美日韩夫妻久久| 热久久一区二区| 日韩视频免费观看高清完整版| 美国十次综合导航| 精品国产成人系列| 国产suv精品一区二区6| 中文字幕免费在线观看视频一区| 成人黄色a**站在线观看| 国产精品大尺度| 欧美在线短视频| 日日噜噜夜夜狠狠视频欧美人| 337p亚洲精品色噜噜| 捆绑变态av一区二区三区| 精品国产免费一区二区三区四区 | 日韩国产一二三区| 2023国产精品视频| av中文字幕不卡| 天天影视色香欲综合网老头| 欧美tickling挠脚心丨vk| 国产乱码字幕精品高清av| 中文字幕一区二区三区四区不卡| 在线视频国产一区| 另类人妖一区二区av| 丝袜美腿亚洲综合| 久久免费的精品国产v∧| 不卡电影一区二区三区| 亚洲成人av免费| 久久女同精品一区二区| 99国产精品久久久久| 日韩不卡一区二区| 国产精品天美传媒| 欧美日韩成人激情| 国产成人啪午夜精品网站男同| 亚洲精品大片www| 26uuu色噜噜精品一区| www.欧美色图| 秋霞午夜鲁丝一区二区老狼| 国产精品久久久久久久久动漫| 欧美福利电影网| 成人黄色在线视频| 日本中文字幕一区二区视频| 中文字幕欧美激情一区| 91.成人天堂一区| 99精品国产一区二区三区不卡| 日本成人在线电影网| 1区2区3区国产精品| 日韩一区二区免费高清| 91视频免费观看| 国产乱人伦精品一区二区在线观看| 亚洲一区二区三区三| 国产亚洲欧美日韩日本| 欧美久久久久久久久久| 99久久久精品免费观看国产蜜| 久久66热偷产精品| 亚洲一区二区在线观看视频| 亚洲国产岛国毛片在线| 精品精品欲导航| 欧美写真视频网站|