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

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

?? systemtray.cpp

?? Client 和Server 配套的網絡連接程序。
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

    pSubMenu = menu.GetSubMenu(0);
    if (!pSubMenu)
        return FALSE;

    ::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos);

    return TRUE;
#endif
}

void CSystemTray::GetMenuDefaultItem(UINT& uItem, BOOL& bByPos)
{
    uItem = m_DefaultMenuItemID;
    bByPos = m_DefaultMenuItemByPos;
}

/////////////////////////////////////////////////////////////////////////////
// CSystemTray message handlers

BEGIN_MESSAGE_MAP(CSystemTray, CWnd)
	//{{AFX_MSG_MAP(CSystemTray)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
#ifndef _WIN32_WCE
	ON_WM_SETTINGCHANGE()
#endif
    ON_REGISTERED_MESSAGE(CSystemTray::m_nTaskbarCreatedMsg, OnTaskbarCreated)
END_MESSAGE_MAP()

void CSystemTray::OnTimer(UINT nIDEvent) 
{
    if (nIDEvent != m_uIDTimer)
    {
        ASSERT(FALSE);
        return;
    }

    COleDateTime CurrentTime = COleDateTime::GetCurrentTime();
    COleDateTimeSpan period = CurrentTime - m_StartTime;

    if (m_nAnimationPeriod > 0 && m_nAnimationPeriod < period.GetTotalSeconds())
    {
        StopAnimation();
        return;
    }

    StepAnimation();
}

// This is called whenever the taskbar is created (eg after explorer crashes
// and restarts. Please note that the WM_TASKBARCREATED message is only passed
// to TOP LEVEL windows (like WM_QUERYNEWPALETTE)
void CSystemTray::OnTaskbarCreated(WPARAM /*wParam*/, LPARAM /*lParam*/) 
{
    InstallIconPending();
}

#ifndef _WIN32_WCE
void CSystemTray::OnSettingChange(UINT uFlags, LPCTSTR lpszSection) 
{
	CWnd::OnSettingChange(uFlags, lpszSection);

    if (uFlags == SPI_SETWORKAREA)
        InstallIconPending();	
}
#endif

LRESULT CSystemTray::OnTrayNotification(UINT wParam, LONG lParam) 
{
    //Return quickly if its not for this tray icon
    if (wParam != m_tnd.uID)
        return 0L;

    CMenu menu, *pSubMenu;
    CWnd *pTargetWnd = GetTargetWnd();
    if (!pTargetWnd)
        return 0L;

    // Clicking with right button brings up a context menu
#if defined(_WIN32_WCE) //&& _WIN32_WCE < 211
    BOOL bAltPressed = ((GetKeyState(VK_MENU) & (1 << (sizeof(SHORT)*8-1))) != 0);
    if (LOWORD(lParam) == WM_LBUTTONUP && bAltPressed)
#else
    if (LOWORD(lParam) == WM_RBUTTONUP)
#endif
    {    
        if (!menu.LoadMenu(m_tnd.uID))
            return 0;
        
        pSubMenu = menu.GetSubMenu(0);
        if (!pSubMenu)
            return 0;

#ifndef _WIN32_WCE
        // Make chosen menu item the default (bold font)
        ::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos);
#endif

        // Display and track the popup menu
        CPoint pos;
#ifdef _WIN32_WCE
        pos = CPoint(GetMessagePos());
#else
        GetCursorPos(&pos);
#endif

        pTargetWnd->SetForegroundWindow(); 
        
#ifndef _WIN32_WCE
        ::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0, 
                         pTargetWnd->GetSafeHwnd(), NULL);
#else
        pSubMenu->TrackPopupMenu(TPM_LEFTALIGN, pos.x, pos.y, pTargetWnd, NULL);
#endif

        // BUGFIX: See "PRB: Menus for Notification Icons Don't Work Correctly"
        pTargetWnd->PostMessage(WM_NULL, 0, 0);

        menu.DestroyMenu();
    } 
#if defined(_WIN32_WCE) //&& _WIN32_WCE < 211
    if (LOWORD(lParam) == WM_LBUTTONDBLCLK && bAltPressed)
#else
    else if (LOWORD(lParam) == WM_LBUTTONDBLCLK) 
#endif
    {
        // double click received, the default action is to execute default menu item
        pTargetWnd->SetForegroundWindow();  

        UINT uItem;
        if (m_DefaultMenuItemByPos)
        {
            if (!menu.LoadMenu(m_tnd.uID))
                return 0;
            
            pSubMenu = menu.GetSubMenu(0);
            if (!pSubMenu)
                return 0;
            
            uItem = pSubMenu->GetMenuItemID(m_DefaultMenuItemID);

			menu.DestroyMenu();
        }
        else
            uItem = m_DefaultMenuItemID;
        
        pTargetWnd->SendMessage(WM_COMMAND, uItem, 0);
    }

    return 1;
}

LRESULT CSystemTray::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
    if (message == m_tnd.uCallbackMessage)
        return OnTrayNotification(wParam, lParam);
	
	return CWnd::WindowProc(message, wParam, lParam);
}

void CSystemTray::InstallIconPending()
{
    // Is the icon display pending, and it's not been set as "hidden"?
    if (!m_bShowIconPending || m_bHidden)
        return;

	// Reset the flags to what was used at creation
	m_tnd.uFlags = m_uCreationFlags;

    // Try and recreate the icon
    m_bHidden = !Shell_NotifyIcon(NIM_ADD, &m_tnd);

    // If it's STILL hidden, then have another go next time...
    m_bShowIconPending = !m_bHidden;

    ASSERT(m_bHidden == FALSE);
}

/////////////////////////////////////////////////////////////////////////////
// For minimising/maximising from system tray

BOOL CALLBACK FindTrayWnd(HWND hwnd, LPARAM lParam)
{
    TCHAR szClassName[256];
    GetClassName(hwnd, szClassName, 255);

    // Did we find the Main System Tray? If so, then get its size and keep going
    if (_tcscmp(szClassName, _T("TrayNotifyWnd")) == 0)
    {
        CRect *pRect = (CRect*) lParam;
        ::GetWindowRect(hwnd, pRect);
        return TRUE;
    }

    // Did we find the System Clock? If so, then adjust the size of the rectangle
    // we have and quit (clock will be found after the system tray)
    if (_tcscmp(szClassName, _T("TrayClockWClass")) == 0)
    {
        CRect *pRect = (CRect*) lParam;
        CRect rectClock;
        ::GetWindowRect(hwnd, rectClock);
        // if clock is above system tray adjust accordingly
        if (rectClock.bottom < pRect->bottom-5) // 10 = random fudge factor.
            pRect->top = rectClock.bottom;
        else
            pRect->right = rectClock.left;
        return FALSE;
    }
 
    return TRUE;
}
 
#ifndef _WIN32_WCE
// enhanced version by Matthew Ellis <m.t.ellis@bigfoot.com>
void CSystemTray::GetTrayWndRect(LPRECT lprect)
{
#define DEFAULT_RECT_WIDTH 150
#define DEFAULT_RECT_HEIGHT 30

    HWND hShellTrayWnd = ::FindWindow(_T("Shell_TrayWnd"), NULL);
    if (hShellTrayWnd)
    {
        ::GetWindowRect(hShellTrayWnd, lprect);
        EnumChildWindows(hShellTrayWnd, FindTrayWnd, (LPARAM)lprect);
        return;
    }
    // OK, we failed to get the rect from the quick hack. Either explorer isn't
    // running or it's a new version of the shell with the window class names
    // changed (how dare Microsoft change these undocumented class names!) So, we
    // try to find out what side of the screen the taskbar is connected to. We
    // know that the system tray is either on the right or the bottom of the
    // taskbar, so we can make a good guess at where to minimize to
    APPBARDATA appBarData;
    appBarData.cbSize=sizeof(appBarData);
    if (SHAppBarMessage(ABM_GETTASKBARPOS,&appBarData))
    {
        // We know the edge the taskbar is connected to, so guess the rect of the
        // system tray. Use various fudge factor to make it look good
        switch(appBarData.uEdge)
        {
        case ABE_LEFT:
        case ABE_RIGHT:
            // We want to minimize to the bottom of the taskbar
            lprect->top    = appBarData.rc.bottom-100;
            lprect->bottom = appBarData.rc.bottom-16;
            lprect->left   = appBarData.rc.left;
            lprect->right  = appBarData.rc.right;
            break;
            
        case ABE_TOP:
        case ABE_BOTTOM:
            // We want to minimize to the right of the taskbar
            lprect->top    = appBarData.rc.top;
            lprect->bottom = appBarData.rc.bottom;
            lprect->left   = appBarData.rc.right-100;
            lprect->right  = appBarData.rc.right-16;
            break;
        }
        return;
    }
    
    // Blimey, we really aren't in luck. It's possible that a third party shell
    // is running instead of explorer. This shell might provide support for the
    // system tray, by providing a Shell_TrayWnd window (which receives the
    // messages for the icons) So, look for a Shell_TrayWnd window and work out
    // the rect from that. Remember that explorer's taskbar is the Shell_TrayWnd,
    // and stretches either the width or the height of the screen. We can't rely
    // on the 3rd party shell's Shell_TrayWnd doing the same, in fact, we can't
    // rely on it being any size. The best we can do is just blindly use the
    // window rect, perhaps limiting the width and height to, say 150 square.
    // Note that if the 3rd party shell supports the same configuraion as
    // explorer (the icons hosted in NotifyTrayWnd, which is a child window of
    // Shell_TrayWnd), we would already have caught it above
    if (hShellTrayWnd)
    {
        ::GetWindowRect(hShellTrayWnd, lprect);
        if (lprect->right - lprect->left > DEFAULT_RECT_WIDTH)
            lprect->left = lprect->right - DEFAULT_RECT_WIDTH;
        if (lprect->bottom - lprect->top > DEFAULT_RECT_HEIGHT)
            lprect->top = lprect->bottom - DEFAULT_RECT_HEIGHT;
        
        return;
    }
    
    // OK. Haven't found a thing. Provide a default rect based on the current work
    // area
    SystemParametersInfo(SPI_GETWORKAREA,0, lprect, 0);
    lprect->left = lprect->right - DEFAULT_RECT_WIDTH;
    lprect->top  = lprect->bottom - DEFAULT_RECT_HEIGHT;
}

// Check to see if the animation has been disabled (Matthew Ellis <m.t.ellis@bigfoot.com>)
BOOL CSystemTray::GetDoWndAnimation()
{
  ANIMATIONINFO ai;

  ai.cbSize=sizeof(ai);
  SystemParametersInfo(SPI_GETANIMATION,sizeof(ai),&ai,0);

  return ai.iMinAnimate?TRUE:FALSE;
}
#endif

BOOL CSystemTray::RemoveTaskbarIcon(CWnd* pWnd)
{
    LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0);

    // Create static invisible window
    if (!::IsWindow(m_wndInvisible.m_hWnd))
    {
		if (!m_wndInvisible.CreateEx(0, pstrOwnerClass, _T(""), WS_POPUP,
				CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
				NULL, 0))
			return FALSE;
    }

    pWnd->SetParent(&m_wndInvisible);

    return TRUE;
}

void CSystemTray::MinimiseToTray(CWnd* pWnd)
{
#ifndef _WIN32_WCE
    if (GetDoWndAnimation())
    {
        CRect rectFrom, rectTo;

        pWnd->GetWindowRect(rectFrom);
        GetTrayWndRect(rectTo);

	    DrawAnimatedRects(pWnd->m_hWnd, IDANI_CAPTION, rectFrom, rectTo);
    }

    RemoveTaskbarIcon(pWnd);
    pWnd->ModifyStyle(WS_VISIBLE, 0);
#endif
}

void CSystemTray::MaximiseFromTray(CWnd* pWnd)
{
#ifndef _WIN32_WCE
    if (GetDoWndAnimation())
    {
        CRect rectTo;
        pWnd->GetWindowRect(rectTo);

        CRect rectFrom;
        GetTrayWndRect(rectFrom);

        pWnd->SetParent(NULL);
	    DrawAnimatedRects(pWnd->m_hWnd, IDANI_CAPTION, rectFrom, rectTo);
    }
    else
        pWnd->SetParent(NULL);

    pWnd->ModifyStyle(0, WS_VISIBLE);
    pWnd->RedrawWindow(NULL, NULL, RDW_UPDATENOW | RDW_ALLCHILDREN | RDW_FRAME |
                                   RDW_INVALIDATE | RDW_ERASE);

    // Move focus away and back again to ensure taskbar icon is recreated
    if (::IsWindow(m_wndInvisible.m_hWnd))
        m_wndInvisible.SetActiveWindow();
    pWnd->SetActiveWindow();
    pWnd->SetForegroundWindow();
#endif
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕综合网| 国产麻豆日韩欧美久久| 国产主播一区二区三区| a4yy欧美一区二区三区| 欧美一级免费观看| 国产精品美女久久久久久| 日韩国产精品久久久久久亚洲| 精品一区二区av| 欧美吻胸吃奶大尺度电影| 久久精品亚洲精品国产欧美kt∨| 亚洲小说欧美激情另类| 99久久伊人精品| 亚洲精品一线二线三线无人区| 一区二区三区在线免费观看 | 国产精品2024| 欧美日韩在线播| 中文字幕色av一区二区三区| 国内精品在线播放| 91精品国产综合久久精品app| 国产精品久久久久久亚洲毛片| 麻豆国产欧美日韩综合精品二区 | 美国毛片一区二区三区| 欧洲亚洲国产日韩| 亚洲视频一区二区在线观看| 国产一区在线观看麻豆| 欧美大片免费久久精品三p| 亚洲午夜精品17c| 一本大道久久a久久综合婷婷| 中文字幕免费观看一区| 国产精品1区2区3区| 2021国产精品久久精品| 另类欧美日韩国产在线| 日韩三级在线观看| 日韩二区三区四区| 欧美一区二区三区视频在线观看| 亚洲一区av在线| 欧美午夜在线观看| 亚洲国产一区视频| 欧美日韩国产小视频| 亚洲激情网站免费观看| 在线观看日产精品| 亚洲综合色噜噜狠狠| 欧美性猛交xxxx乱大交退制版 | 日本系列欧美系列| 欧美丰满高潮xxxx喷水动漫| 婷婷丁香久久五月婷婷| 欧美精品精品一区| 免费成人美女在线观看.| 欧美大片日本大片免费观看| 久久国产精品99久久人人澡| 久久日一线二线三线suv| 国产精品影音先锋| 亚洲天堂久久久久久久| 欧美网站大全在线观看| 日本aⅴ亚洲精品中文乱码| 26uuu亚洲综合色| 丁香激情综合国产| 亚洲精品欧美综合四区| 欧美日韩一区二区三区四区五区| 五月天欧美精品| 亚洲精品一区二区三区蜜桃下载 | 国产高清无密码一区二区三区| 久久九九国产精品| 91国在线观看| 美女视频第一区二区三区免费观看网站| 日韩区在线观看| 东方欧美亚洲色图在线| 亚洲成av人影院| 久久久夜色精品亚洲| 91麻豆国产在线观看| 日韩电影在线免费观看| 国产日本亚洲高清| 欧美性三三影院| 国产精品99久久久久久似苏梦涵 | 精品第一国产综合精品aⅴ| 懂色av一区二区在线播放| 亚洲男人的天堂一区二区| 日韩午夜在线播放| 成人h精品动漫一区二区三区| 亚洲综合一区二区| 久久综合给合久久狠狠狠97色69| 91蜜桃免费观看视频| 久久99久国产精品黄毛片色诱| 亚洲欧洲精品一区二区三区不卡| 欧美日本国产视频| 972aa.com艺术欧美| 久久精品99久久久| 亚洲高清免费一级二级三级| 久久久久九九视频| 欧美一区二区三区在线电影| 97久久精品人人做人人爽| 极品少妇一区二区三区精品视频 | 国产欧美精品一区aⅴ影院| 欧美午夜精品免费| 99国产一区二区三精品乱码| 久久99国产精品尤物| 香港成人在线视频| 亚洲色图视频网| 欧美国产在线观看| 精品欧美一区二区三区精品久久 | 麻豆精品久久精品色综合| 亚洲激情自拍视频| 国产精品乱人伦| 国产日本欧美一区二区| 精品噜噜噜噜久久久久久久久试看| 97久久超碰精品国产| 成人av在线网| 欧美嫩在线观看| 91麻豆国产福利精品| www.亚洲人| 国产91丝袜在线播放0| 国产精品资源在线观看| 精品亚洲aⅴ乱码一区二区三区| 亚洲成av人影院在线观看网| 一区二区三区高清不卡| 亚洲人一二三区| 亚洲天堂久久久久久久| 亚洲欧美一区二区三区久本道91 | 日本一道高清亚洲日美韩| 一区二区三区四区亚洲| 一区二区三区在线影院| 一区二区三区产品免费精品久久75| 欧美激情一区二区三区四区| 国产欧美日韩视频在线观看| 久久精品在线免费观看| 欧美国产成人在线| 国产精品乱码久久久久久| 国产精品美女久久久久aⅴ | 国产亚洲欧美激情| 国产午夜精品福利| 国产精品护士白丝一区av| 国产精品萝li| 一级中文字幕一区二区| 午夜精品视频一区| 久久99精品国产.久久久久久 | 国产精品888| 成人午夜激情视频| 91视频观看视频| 欧美日韩成人一区二区| 日韩一区二区免费在线电影| 日韩精品最新网址| 国产精品网友自拍| 亚洲国产人成综合网站| 久久精品国产色蜜蜜麻豆| 欧美性极品少妇| 欧美变态tickling挠脚心| 中文字幕国产一区| 亚洲综合激情网| 久久99精品久久久久久动态图 | 91色|porny| 91精品国产综合久久久久久| 久久夜色精品一区| 亚洲欧美在线观看| 日韩和欧美一区二区三区| 国产成人综合网| 色综合久久久久久久久| 日韩精品中午字幕| 国产精品乱码久久久久久| 青娱乐精品在线视频| 99久久伊人网影院| 日韩精品一区二区三区swag| 中文字幕一区二区三中文字幕| 亚洲一级二级在线| 国产成a人亚洲| 在线成人av网站| 1024成人网色www| 久久se精品一区二区| 91成人网在线| 久久免费午夜影院| 日韩精品欧美精品| 99久久免费国产| 久久中文字幕电影| 亚洲高清中文字幕| 99re视频这里只有精品| 久久综合狠狠综合| 亚洲成人av福利| 99久久国产综合精品女不卡| 日韩免费观看高清完整版| 亚洲高清视频中文字幕| www.欧美色图| 久久久99精品久久| 日本aⅴ亚洲精品中文乱码| 在线免费观看成人短视频| 中文乱码免费一区二区| 久久99国产精品尤物| 宅男在线国产精品| 亚洲一区av在线| 色婷婷激情综合| 国产精品国产成人国产三级| 国产一本一道久久香蕉| 日韩欧美色电影| 日韩av午夜在线观看| 精品视频1区2区| 亚洲精品视频在线观看免费| 99视频国产精品| 国产精品毛片高清在线完整版| 国产精品影视在线观看| 久久综合色天天久久综合图片| 成人亚洲精品久久久久软件| 国产亚洲成av人在线观看导航|