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

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

?? ctxmenu.cpp

?? com 組建的菜單應用
?? CPP
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//

/// CTXMENU.CPP - class implementation for CContextMenuSample

#include "common.h"

#define ARRAYSIZE(a) (sizeof(a)/sizeof(*a))


extern UINT g_cRefDLL;
extern HINSTANCE g_hinstDLL;


const CHAR c_aszVerb[] = "CME Sample";  // not UNICODE!


UINT g_idCmd = 0;


//****************************************************************************
// Function Name: CContextMenuSample
// 
// Purpose: constructor for the class
// 
// Arguments:
//    NONE
//
// Return Values:
//    NONE
//
// Side Effects:
//
// Description:
//
//****************************************************************************
CContextMenuSample::CContextMenuSample()
{
    m_cRef = 0;
    m_punkSite = NULL;
    ++g_cRefDLL;
}


//****************************************************************************
// Function Name: ~CContextMenuSample
// 
// Purpose: destructor for the class
// 
// Arguments:
//    NONE
//
// Return Values:
//    NONE
// 
// Side Effects:
//
// Description:
//
//****************************************************************************
CContextMenuSample::~CContextMenuSample()
{
    ASSERT(0 == m_cRef);

    if (NULL != m_punkSite)
    {
        m_punkSite->Release();
    }
    
    --g_cRefDLL;
}


//****************************************************************************
// Function Name: AddRef
//
// Purpose:  IUnknown::AddRef
//
// Arguments:
//    NONE
//
// Return Values:
//    ULONG - new reference count
//
// Side Effects:
//
// Description:
//
//****************************************************************************
STDMETHODIMP_(ULONG) CContextMenuSample::AddRef()
{
    return ++m_cRef;
}


//****************************************************************************
// Function Name: Release
// 
// Purpose: IUnknown::Release()
// 
// Arguments:
//    NONE
// 
// Return Values:
//    ULONG - new reference count 
//  
// Side Effects: 
//  
// Description: 
//    
//****************************************************************************
STDMETHODIMP_(ULONG) CContextMenuSample::Release()
{
    if (0 == --m_cRef)
    {
        delete this;
        return 0;
    }

    return m_cRef;
}


//****************************************************************************
// Function Name: QueryInterface
// 
// Purpose: IUnknown::QueryInterface
// 
// Arguments:
//    IN REFIID riid - interface identifier
//    OUT LPVOID *ppv - interface pointer returned if supported
//  
// Return Values:
//    HRESULT - success/failure
// 
// Side Effects: 
//  
// Description: 
//    
//****************************************************************************
STDMETHODIMP CContextMenuSample::QueryInterface(
	REFIID riid, 
	LPVOID *ppv
	)
{
    if (NULL == ppv)
	{
        return E_POINTER;
	}

    *ppv = NULL;

    if (IID_IUnknown == riid)
	{
        *ppv = (LPVOID)this;
	}
    else if (IID_IContextMenu == riid)
	{
		*ppv = dynamic_cast<IContextMenu*>(this);
	}
    else if (IID_IObjectWithSite == riid)
	{
		*ppv = dynamic_cast<IObjectWithSite*>(this);
	}

    if (NULL != *ppv)
    {
        ((IUnknown *)(*ppv))->AddRef();
        return S_OK;
    }

    return E_NOINTERFACE;

}


//****************************************************************************
// Function Name: GetCommandString
//
// Purpose: get the command string for this context menu item
//
// Arguments:
//    IN UINT idCmd - the menu command identifier
//    IN UINT uFlags - flags specifying what information is being requested
//    IN/OUT UINT *pwReserved - ignored
//    OUT LPSTR pszName - output buffer
//    IN UINT cchMax - length of output buffer
//
// Return Values:
//    HRESULT - SUCCESS/FAILURE
//
// Side Effects:
//
// Description: 
//
//****************************************************************************
STDMETHODIMP CContextMenuSample::GetCommandString(
	UINT idCmd, 
	UINT uFlags,
    UINT *pwReserved, 
	LPSTR pszName, 
	UINT cchMax
	)
{
    HRESULT hr = NOERROR;

    UNREFERENCED_PARAMETER(pwReserved);

    switch (uFlags)
    {
        case GCS_HELPTEXT:
            // no help text
            if ((NULL != pszName) && (cchMax > 0))
			{
				*pszName = '\0';
			}
            break;

        case GCS_VALIDATE:
            // only one command - does it match?
            if ((0 == g_idCmd) || (idCmd != g_idCmd))
			{
                hr = S_FALSE;
			}
            break;

        case GCS_VERB:
            // only one verb
            if (idCmd != g_idCmd)
			{
                hr = E_FAIL;
			}
            else
            {
                // copy the verb
                if (NULL != pszName)
				{
                    strncpy(pszName, c_aszVerb, cchMax);
				}
            }
            break;

        default:
            hr = E_NOTIMPL;
            break;
    }

    return hr;

}


//****************************************************************************
// Function Name: InvokeCommand
//
// Purpose: invoke a command from the context menu
//
// Arguments:
//    IN/OUT LPCMINVOKECOMMANDINFO pici - ptr to command info struct
//
// Return Values:
//    HRESULT - SUCCESS/FAILURE
//
// Side Effects:
//
// Description: 
//
//****************************************************************************
STDMETHODIMP CContextMenuSample::InvokeCommand(
	LPCMINVOKECOMMANDINFO pici
	)
{
    HRESULT hr = NOERROR;

    if (NULL == pici)
    {
        hr = E_POINTER;
    }
    else
    {
        if (sizeof(CMINVOKECOMMANDINFO) != pici->cbSize)
        {
            // there's no CMINVOKECOMMANDINFOEX in WinCE
            hr = E_INVALIDARG;
        }
        else
        {
            IDataObject *pIdo;
            
            if (FAILED(GetSite(IID_IDataObject, (void **)&pIdo)))
            {
                hr = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_NULL,
                    ERROR_NO_SUCH_SITE);
            }
            else
            {
                FORMATETC fe;
                STGMEDIUM sm;
                
                fe.cfFormat = CF_HDROP;
                fe.ptd = NULL;
                fe.dwAspect = DVASPECT_CONTENT;
                fe.lindex = -1;
                fe.tymed = TYMED_HGLOBAL;

                if (FAILED(pIdo->GetData(&fe, &sm)))
                {
                    hr = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_STORAGE,
                        ERROR_INVALID_PARAMETER);
                }
                else
                {
                    DROPFILES *pdf;
                    TCHAR *pszFile;
                    
                    pdf = (DROPFILES *)sm.hGlobal;
                    // pdf->pFiles is offset to doubly NULL terminated filename
                    // File Explorer only supports Context Menu extensions when a single
                    // file is selected, so this will always point to a single filename
                    // that is double NULL terminated.
                    pszFile = (TCHAR *)((BYTE *)pdf + pdf->pFiles);
                    MessageBox(NULL, pszFile, TEXT("CME Sample"), MB_OK); 
                
                    LocalFree(sm.hGlobal);
                }

                pIdo->Release();
            }
        }
    }

    return hr;

}


//****************************************************************************
// Function Name: QueryContextMenu
//
// Purpose: add commands to the context menu
//
// Arguments:
//    IN HMENU hmenu - handle to the menu
//    IN UINT indexMenu - zero-based position at which to insert the first item
//    IN UINT idCmdFirst - first available command ID
//    IN UINT idCmdLast - last available command ID
//    IN UINT uFlags - optional flags
//
// Return Values:
//    HRESULT - SUCCESS/FAILURE
//
// Side Effects:
//
// Description: 
//
//****************************************************************************
STDMETHODIMP CContextMenuSample::QueryContextMenu(
	HMENU hmenu,
    UINT indexMenu, 
	UINT idCmdFirst,
	UINT idCmdLast,
	UINT uFlags
	)
{
    HRESULT hr = NOERROR;

    UNREFERENCED_PARAMETER(uFlags);

    if (idCmdLast < idCmdFirst)
    {
        hr = E_INVALIDARG;
    }
    else
    {
        IDataObject *pIdo;

        // get the site
        if (FAILED(GetSite(IID_IDataObject, (void **)&pIdo)))
        {
            hr = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_NULL,
                ERROR_NO_SUCH_SITE);
        }
        else
        {
            FORMATETC fe;
            STGMEDIUM sm;
            
            fe.cfFormat = CF_HDROP;
            fe.ptd = NULL;
            fe.dwAspect = DVASPECT_CONTENT;
            fe.lindex = -1;
            fe.tymed = TYMED_HGLOBAL;

            if (FAILED(pIdo->GetData(&fe, &sm)))
            {
                hr = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_STORAGE,
                    ERROR_INVALID_PARAMETER);
            }
            else
            {
                // sm.hGlobal contains pointer to a DROPFILES stucture
                
                TCHAR szCommand[MAX_PATH];
                DROPFILES *pdf;
                TCHAR *pszFile;
                
                // load the "CME Sample" string
                StringCchCopy(szCommand, ARRAYSIZE(szCommand), (LPTSTR)LoadString(g_hinstDLL, IDS_SAMPLE,
                    NULL, 0));

                pdf = (DROPFILES *)sm.hGlobal;
                // pdf->pFiles is offset to doubly NULL terminated filename
                // File Explorer only supports Context Menu extensions when a single
                // file is selected, so this will always point to a single filename
                // that is double NULL terminated.
                pszFile = (TCHAR *)((BYTE *)pdf + pdf->pFiles);
                
                // Tack on the filename
                StringCchCat(szCommand, ARRAYSIZE(szCommand), pszFile);
                
                // add one command
                g_idCmd = idCmdFirst;
                if (InsertMenu(hmenu, indexMenu, MF_BYPOSITION, g_idCmd,
                        szCommand))
                {
                    hr = MAKE_HRESULT(SEVERITY_SUCCESS, 0, 1);
                }
                LocalFree(sm.hGlobal);
            }

            pIdo->Release();

        }
    }

    return hr;

}


//****************************************************************************
// Function Name: GetSite
//
// Purpose: get the owner (site) of the object
//
// Arguments:
//    IN REFIID riid - interface ID to retrieve
//    OUT void **ppvSite - interface pointer
//
// Return Values:
//    HRESULT - SUCCESS/FAILURE
//
// Side Effects:
//
// Description: 
//
//****************************************************************************
STDMETHODIMP CContextMenuSample::GetSite(
	REFIID riid, 
	void **ppvSite
	)
{
    HRESULT hr = NOERROR;

    if (NULL == ppvSite)
    {
        hr = E_POINTER;
    }
    else
    {
        if (NULL == m_punkSite)
        {
            // no site
            *ppvSite = NULL;
            hr = E_FAIL;
        }
        else
        {
            // see if we have the requested interface
            hr = m_punkSite->QueryInterface(riid, ppvSite);
        }
    }

    return hr;

}


//****************************************************************************
// Function Name: SetSite
//
// Purpose: set the owner (site) of the object
//
// Arguments:
//    IN IUnknown *pUnkSite - object pointer
//
// Return Values:
//    HRESULT - SUCCESS/FAILURE
//
// Side Effects:
//
// Description: 
//
//****************************************************************************
STDMETHODIMP CContextMenuSample::SetSite(
	IUnknown *pUnkSite
	)
{
    if (NULL != pUnkSite)
    {
        pUnkSite->AddRef();
    }

    if (NULL != m_punkSite)
    {
        m_punkSite->Release();
    }
    
    m_punkSite = pUnkSite;

    return NOERROR;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久夜色精品国产网站| 中文字幕日韩av资源站| 午夜精品久久久久久久蜜桃app| 国产精品99久久久久久久女警 | 欧美高清激情brazzers| 亚洲精品伦理在线| 色综合天天综合网国产成人综合天| 欧美激情一区二区三区全黄 | 久久国产麻豆精品| 5858s免费视频成人| 亚洲欧洲日产国产综合网| 懂色av中文字幕一区二区三区| 久久久亚洲精品石原莉奈| 亚洲国产综合人成综合网站| 在线观看国产日韩| 亚洲成人激情综合网| 欧美日韩在线播放三区| 午夜精品123| 色综合网色综合| 中文字幕一区二区在线观看| caoporen国产精品视频| 精品少妇一区二区三区日产乱码 | 欧美精彩视频一区二区三区| 日本韩国欧美一区二区三区| 美腿丝袜亚洲色图| 国产精品久久久久一区| 欧美日韩不卡视频| 国产精品一区不卡| 亚洲成人免费av| 国产亲近乱来精品视频| 欧美揉bbbbb揉bbbbb| 国产精品一色哟哟哟| 亚洲一区中文日韩| 亚洲国产精品激情在线观看| 欧美日韩国产综合久久| 成人动漫视频在线| 日本亚洲一区二区| 亚洲素人一区二区| 欧美不卡一区二区三区| 欧美亚洲国产bt| 成熟亚洲日本毛茸茸凸凹| 日韩av一区二区三区四区| 国产精品久久看| 精品国产免费一区二区三区四区 | 99久久国产综合精品女不卡| 日本成人中文字幕| 亚洲丝袜另类动漫二区| 精品88久久久久88久久久| 欧美日韩免费视频| www.日韩av| 国产成人自拍网| 黄色资源网久久资源365| 三级欧美在线一区| 一区二区国产视频| 中文字幕人成不卡一区| 久久久国产精华| 日韩精品一区二区三区视频在线观看| 91九色02白丝porn| av在线一区二区三区| 国产69精品久久久久毛片 | 国产一区二区伦理片| 日本亚洲电影天堂| 亚洲妇熟xx妇色黄| 一区二区三区四区激情| 中文字幕在线一区| 国产精品久久久99| 国产女人aaa级久久久级| 26uuu欧美日本| 精品欧美乱码久久久久久| 欧美二区三区的天堂| 在线成人高清不卡| 欧美性感一类影片在线播放| 91黄视频在线| 欧美性猛交xxxxxxxx| 欧美亚一区二区| 欧美日韩美少妇| 欧美日韩三级在线| 91精品国产欧美一区二区 | 欧美mv日韩mv亚洲| 精品国产免费人成电影在线观看四季| 日韩午夜激情电影| 欧美成人艳星乳罩| 2017欧美狠狠色| 久久精品视频在线看| 国产视频一区二区在线观看| 久久女同精品一区二区| 国产亚洲综合在线| 国产精品毛片大码女人| 亚洲欧洲精品一区二区三区| 国产精品免费视频一区| 亚洲女与黑人做爰| 亚洲精品一卡二卡| 亚洲国产你懂的| 美女网站色91| 国产精品一区一区三区| 国产麻豆精品久久一二三| 国产盗摄女厕一区二区三区| eeuss鲁片一区二区三区在线看| 99麻豆久久久国产精品免费| 色婷婷综合久色| 欧美日韩亚洲不卡| 精品国产制服丝袜高跟| 国产欧美综合在线| 一区二区三区四区在线播放 | 91精品国产综合久久久久久| 日韩一级精品视频在线观看| 国产性色一区二区| 亚洲欧美另类在线| 青青青爽久久午夜综合久久午夜| 国产在线播放一区三区四| 成人小视频免费在线观看| 91高清视频免费看| 精品国产乱码久久久久久免费| 久久久久久免费毛片精品| 国产精品美女久久久久久2018| 一区二区三区高清在线| 久久er99热精品一区二区| 成人av中文字幕| 欧美一区二区高清| ...中文天堂在线一区| 天堂va蜜桃一区二区三区漫画版| 精品午夜久久福利影院| 91久久精品午夜一区二区| 精品剧情v国产在线观看在线| 中文字幕在线不卡| 韩国成人福利片在线播放| 91免费观看国产| 26uuu另类欧美| 日精品一区二区三区| 成人精品gif动图一区| 欧美日韩国产高清一区| 亚洲国产精品激情在线观看| 青青草97国产精品免费观看| av一区二区三区黑人| 欧美岛国在线观看| 亚洲三级在线播放| 国产一区二区三区日韩| 欧美在线免费播放| 国产欧美一区二区精品性色超碰 | 色综合天天综合色综合av| 精品噜噜噜噜久久久久久久久试看 | 黑人巨大精品欧美一区| 欧洲国内综合视频| 国产精品第五页| 国产精品亚洲人在线观看| 91精品国产欧美一区二区18| 一区二区三区中文字幕电影| 高清不卡一区二区在线| 欧美tickle裸体挠脚心vk| 偷拍与自拍一区| 在线国产电影不卡| 17c精品麻豆一区二区免费| 国内外成人在线| 欧美一级二级在线观看| 亚洲成年人网站在线观看| 91在线高清观看| 中文一区二区在线观看| 国产精品白丝jk黑袜喷水| 精品久久久久久综合日本欧美| 亚洲成人免费在线| 欧美午夜寂寞影院| 亚洲一卡二卡三卡四卡| 日本高清不卡在线观看| 亚洲欧美日韩国产成人精品影院| 成人伦理片在线| 国产精品久久久久久久裸模| 成人综合婷婷国产精品久久免费| 国产日韩v精品一区二区| 国产激情精品久久久第一区二区 | 欧美精品一卡两卡| 亚洲成av人片一区二区三区| 欧美网站大全在线观看| 亚洲美女一区二区三区| 日本高清不卡视频| 一区二区理论电影在线观看| 91成人免费电影| 亚洲成在人线在线播放| 欧美日韩精品高清| 日韩成人免费看| 精品国产一区二区精华| 国产成人精品三级| 国产精品美女www爽爽爽| 一本到高清视频免费精品| 亚洲精品免费一二三区| 欧美网站一区二区| 青青草国产精品97视觉盛宴| 日韩精品自拍偷拍| 国产精品资源站在线| 国产精品电影一区二区| 色综合久久综合中文综合网| 一区二区不卡在线播放| 欧美日本在线一区| 久久国产生活片100| 国产欧美日韩不卡| av中文一区二区三区| 亚洲丰满少妇videoshd| 精品国产人成亚洲区| 成人av资源网站| 午夜精品久久久久久久蜜桃app| 日韩视频免费直播|