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

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

?? graphbuildingdlg.cpp

?? 簡單的 COM 實際例子 用法2
?? CPP
字號:
// GraphBuildingDlg.cpp : implementation file
//

#include "stdafx.h"
#include "GraphBuilding.h"
#include "GraphBuildingDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CGraphBuildingDlg dialog

CGraphBuildingDlg::CGraphBuildingDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CGraphBuildingDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CGraphBuildingDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CGraphBuildingDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGraphBuildingDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CGraphBuildingDlg, CDialog)
	//{{AFX_MSG_MAP(CGraphBuildingDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_TEST, OnButtonTest)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGraphBuildingDlg message handlers

BOOL CGraphBuildingDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CGraphBuildingDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CGraphBuildingDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}


//////////////////////////////////////////////////////////////////////////////
///////////////////// Graph building methods /////////////////////////////////

HRESULT AddFilterByCLSID(
    IGraphBuilder *pGraph,  // Pointer to the Filter Graph Manager.
    const GUID& clsid,      // CLSID of the filter to create.
    LPCWSTR wszName,        // A name for the filter.
    IBaseFilter **ppF)      // Receives a pointer to the filter.
{
    if (!pGraph || ! ppF) return E_POINTER;
    *ppF = 0;
    IBaseFilter *pF = 0;
    HRESULT hr = CoCreateInstance(clsid, 0, CLSCTX_INPROC_SERVER,
        IID_IBaseFilter, reinterpret_cast<void**>(&pF));
    if (SUCCEEDED(hr))
    {
        hr = pGraph->AddFilter(pF, wszName);
        if (SUCCEEDED(hr))
            *ppF = pF;
        else
            pF->Release();
    }
    return hr;
}

HRESULT GetUnconnectedPin(
    IBaseFilter *pFilter,   // Pointer to the filter.
    PIN_DIRECTION PinDir,   // Direction of the pin to find.
    IPin **ppPin)           // Receives a pointer to the pin.
{
    *ppPin = 0;
    IEnumPins *pEnum = 0;
    IPin *pPin = 0;
    HRESULT hr = pFilter->EnumPins(&pEnum);
    if (FAILED(hr))
    {
        return hr;
    }
    while (pEnum->Next(1, &pPin, NULL) == S_OK)
    {
        PIN_DIRECTION ThisPinDir;
        pPin->QueryDirection(&ThisPinDir);
        if (ThisPinDir == PinDir)
        {
            IPin *pTmp = 0;
            hr = pPin->ConnectedTo(&pTmp);
            if (SUCCEEDED(hr))  // Already connected, not the pin we want.
            {
                pTmp->Release();
            }
            else  // Unconnected, this is the pin we want.
            {
                pEnum->Release();
                *ppPin = pPin;
                return S_OK;
            }
        }
        pPin->Release();
    }
    pEnum->Release();
    // Did not find a matching pin.
    return E_FAIL;
}

HRESULT ConnectFilters(
    IGraphBuilder *pGraph, // Filter Graph Manager.
    IPin *pOut,            // Output pin on the upstream filter.
    IBaseFilter *pDest)    // Downstream filter.
{
    if ((pGraph == NULL) || (pOut == NULL) || (pDest == NULL))
    {
        return E_POINTER;
    }
#ifdef debug
        PIN_DIRECTION PinDir;
        pOut->QueryDirection(&PinDir);
        _ASSERTE(PinDir == PINDIR_OUTPUT);
#endif

    // Find an input pin on the downstream filter.
    IPin *pIn = 0;
    HRESULT hr = GetUnconnectedPin(pDest, PINDIR_INPUT, &pIn);
    if (FAILED(hr))
    {
        return hr;
    }
    // Try to connect them.
    hr = pGraph->Connect(pOut, pIn);
    pIn->Release();
    return hr;
}

HRESULT ConnectFilters(
    IGraphBuilder *pGraph, 
    IBaseFilter *pSrc, 
    IBaseFilter *pDest)
{
    if ((pGraph == NULL) || (pSrc == NULL) || (pDest == NULL))
    {
        return E_POINTER;
    }

    // Find an output pin on the first filter.
    IPin *pOut = 0;
    HRESULT hr = GetUnconnectedPin(pSrc, PINDIR_OUTPUT, &pOut);
    if (FAILED(hr)) 
    {
        return hr;
    }
    hr = ConnectFilters(pGraph, pOut, pDest);
    pOut->Release();
    return hr;
}

HRESULT FindFilterInterface(
    IGraphBuilder *pGraph, // Pointer to the Filter Graph Manager.
    REFGUID iid,           // IID of the interface to retrieve.
    void **ppUnk)          // Receives the interface pointer.
{
    if (!pGraph || !ppUnk) return E_POINTER;

    HRESULT hr = E_FAIL;
    IEnumFilters *pEnum = NULL;
    IBaseFilter *pF = NULL;
    if (FAILED(pGraph->EnumFilters(&pEnum)))
    {
        return E_FAIL;
    }
    // Query every filter for the interface.
    while (S_OK == pEnum->Next(1, &pF, 0))
    {
        hr = pF->QueryInterface(iid, ppUnk);
        pF->Release();
        if (SUCCEEDED(hr))
        {
            break;
        }
    }
    pEnum->Release();
    return hr;
}

HRESULT FindPinInterface(
    IBaseFilter *pFilter,  // Pointer to the filter to search.
    REFGUID iid,           // IID of the interface.
    void **ppUnk)          // Receives the interface pointer.
{
    if (!pFilter || !ppUnk) return E_POINTER;

    HRESULT hr = E_FAIL;
    IEnumPins *pEnum = 0;
    if (FAILED(pFilter->EnumPins(&pEnum)))
    {
        return E_FAIL;
    }
    // Query every pin for the interface.
    IPin *pPin = 0;
    while (S_OK == pEnum->Next(1, &pPin, 0))
    {
        hr = pPin->QueryInterface(iid, ppUnk);
        pPin->Release();
        if (SUCCEEDED(hr))
        {
            break;
        }
    }
    pEnum->Release();
    return hr;
}

HRESULT FindInterfaceAnywhere(
    IGraphBuilder *pGraph, 
    REFGUID iid, 
    void **ppUnk)
{
    if (!pGraph || !ppUnk) return E_POINTER;
    HRESULT hr = E_FAIL;
    IEnumFilters *pEnum = 0;
    if (FAILED(pGraph->EnumFilters(&pEnum)))
    {
        return E_FAIL;
    }
    // Loop through every filter in the graph.
    IBaseFilter *pF = 0;
    while (S_OK == pEnum->Next(1, &pF, 0))
    {
        hr = pF->QueryInterface(iid, ppUnk);
        if (FAILED(hr))
        {
            // The filter does not expose the interface, but maybe
            // one of its pins does.
            hr = FindPinInterface(pF, iid, ppUnk);
        }
        pF->Release();
        if (SUCCEEDED(hr))
        {
            break;
        }
    }
    pEnum->Release();
    return hr;
}

// Get the first upstream or downstream filter
HRESULT GetNextFilter(
    IBaseFilter *pFilter, // Pointer to the starting filter
    PIN_DIRECTION Dir,    // Direction to search (upstream or downstream)
    IBaseFilter **ppNext) // Receives a pointer to the next filter.
{
    if (!pFilter || !ppNext) return E_POINTER;

    IEnumPins *pEnum = 0;
    IPin *pPin = 0;
    HRESULT hr = pFilter->EnumPins(&pEnum);
    if (FAILED(hr)) return hr;
    while (S_OK == pEnum->Next(1, &pPin, 0))
    {
        // See if this pin matches the specified direction.
        PIN_DIRECTION ThisPinDir;
        hr = pPin->QueryDirection(&ThisPinDir);
        if (FAILED(hr))
        {
            // Something strange happened.
            hr = E_UNEXPECTED;
            pPin->Release();
            break;
        }
        if (ThisPinDir == Dir)
        {
            // Check if the pin is connected to another pin.
            IPin *pPinNext = 0;
            hr = pPin->ConnectedTo(&pPinNext);
            if (SUCCEEDED(hr))
            {
                // Get the filter that owns that pin.
                PIN_INFO PinInfo;
                hr = pPinNext->QueryPinInfo(&PinInfo);
                pPinNext->Release();
                pPin->Release();
                pEnum->Release();
                if (FAILED(hr) || (PinInfo.pFilter == NULL))
                {
                    // Something strange happened.
                    return E_UNEXPECTED;
                }
                // This is the filter we're looking for.
                *ppNext = PinInfo.pFilter; // Client must release.
                return S_OK;
            }
        }
        pPin->Release();
    }
    pEnum->Release();
    // Did not find a matching filter.
    return E_FAIL;
}


// Define a typedef for a list of filters.
typedef CGenericList<IBaseFilter> CFilterList;

// Forward declaration. Adds a filter to the list unless it's a duplicate.
void AddFilterUnique(CFilterList &FilterList, IBaseFilter *pNew);

// Find all the immediate upstream or downstream peers of a filter.
HRESULT GetPeerFilters(
    IBaseFilter *pFilter, // Pointer to the starting filter
    PIN_DIRECTION Dir,    // Direction to search (upstream or downstream)
    CFilterList &FilterList)  // Collect the results in this list.
{
    if (!pFilter) return E_POINTER;

    IEnumPins *pEnum = 0;
    IPin *pPin = 0;
    HRESULT hr = pFilter->EnumPins(&pEnum);
    if (FAILED(hr)) return hr;
    while (S_OK == pEnum->Next(1, &pPin, 0))
    {
        // See if this pin matches the specified direction.
        PIN_DIRECTION ThisPinDir;
        hr = pPin->QueryDirection(&ThisPinDir);
        if (FAILED(hr))
        {
            // Something strange happened.
            hr = E_UNEXPECTED;
            pPin->Release();
            break;
        }
        if (ThisPinDir == Dir)
        {
            // Check if the pin is connected to another pin.
            IPin *pPinNext = 0;
            hr = pPin->ConnectedTo(&pPinNext);
            if (SUCCEEDED(hr))
            {
                // Get the filter that owns that pin.
                PIN_INFO PinInfo;
                hr = pPinNext->QueryPinInfo(&PinInfo);
                pPinNext->Release();
                if (FAILED(hr) || (PinInfo.pFilter == NULL))
                {
                    // Something strange happened.
                    pPin->Release();
                    pEnum->Release();
                    return E_UNEXPECTED;
                }
                // Insert the filter into the list.
                AddFilterUnique(FilterList, PinInfo.pFilter);
                PinInfo.pFilter->Release();
            }
        }
        pPin->Release();
    }
    pEnum->Release();
    return S_OK;
}

void AddFilterUnique(CFilterList &FilterList, IBaseFilter *pNew)
{
    if (pNew == NULL) return;

    POSITION pos = FilterList.GetHeadPosition();
    while (pos)
    {
        IBaseFilter *pF = FilterList.GetNext(pos);
        if (IsEqualObject(pF, pNew))
        {
            return;
        }
    }
    pNew->AddRef();  // The caller must release everything in the list.
    FilterList.AddTail(pNew);
}


// Tear down everything downstream of a given filter
void NukeDownstream(IGraphBuilder * inGraph, IBaseFilter * inFilter) 
{
	if (inGraph && inFilter)
	{
		IEnumPins * pinEnum = 0;
		if (SUCCEEDED(inFilter->EnumPins(&pinEnum)))
		{
			pinEnum->Reset();
			IPin * pin = 0;
			ULONG cFetched = 0;
			bool pass = true;
			while (pass && SUCCEEDED(pinEnum->Next(1, &pin, &cFetched)))
			{
				if (pin && cFetched)
				{
					IPin * connectedPin = 0;
					pin->ConnectedTo(&connectedPin);
					if(connectedPin) 
					{
						PIN_INFO pininfo;
						if (SUCCEEDED(connectedPin->QueryPinInfo(&pininfo)))
						{
							if(pininfo.dir == PINDIR_INPUT) 
							{
								NukeDownstream(inGraph, pininfo.pFilter);
								inGraph->Disconnect(connectedPin);
								inGraph->Disconnect(pin);
								inGraph->RemoveFilter(pininfo.pFilter);
							}
							pininfo.pFilter->Release();
						}
						connectedPin->Release();
					}
					pin->Release();
				}
				else
				{
					pass = false;
				}
			}
			pinEnum->Release();
		}
	}
}

// Tear down everything upstream of a given filter
void NukeUpstream(IGraphBuilder * inGraph, IBaseFilter * inFilter) 
{
	if (inGraph && inFilter)
	{
		IEnumPins * pinEnum = 0;
		if (SUCCEEDED(inFilter->EnumPins(&pinEnum)))
		{
			pinEnum->Reset();
			IPin * pin = 0;
			ULONG cFetched = 0;
			bool pass = true;
			while (pass && SUCCEEDED(pinEnum->Next(1, &pin, &cFetched)))
			{
				if (pin && cFetched)
				{
					IPin * connectedPin = 0;
					pin->ConnectedTo(&connectedPin);
					if(connectedPin) 
					{
						PIN_INFO pininfo;
						if (SUCCEEDED(connectedPin->QueryPinInfo(&pininfo)))
						{
							if(pininfo.dir == PINDIR_OUTPUT) 
							{
								NukeUpstream(inGraph, pininfo.pFilter);
								inGraph->Disconnect(connectedPin);
								inGraph->Disconnect(pin);
								inGraph->RemoveFilter(pininfo.pFilter);
							}
							pininfo.pFilter->Release();
						}
						connectedPin->Release();
					}
					pin->Release();
				}
				else
				{
					pass = false;
				}
			}
			pinEnum->Release();
		}
	}
}

/////////////////////////////////////////////////////////////////////////////
void CGraphBuildingDlg::OnButtonTest() 
{
	// TODO: Add your control notification handler code here
	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产视频a| 亚洲久草在线视频| 欧美日韩成人在线一区| 成人毛片在线观看| 国产成人免费视频一区| 美女视频黄免费的久久| 日韩和欧美一区二区三区| 亚洲乱码中文字幕综合| 日韩毛片高清在线播放| 中文字幕中文字幕中文字幕亚洲无线 | 色综合一个色综合亚洲| 国产成人在线视频免费播放| 美女尤物国产一区| 日本aⅴ免费视频一区二区三区| 五月天久久比比资源色| 视频一区二区不卡| 蜜桃av噜噜一区| 久久精品国产秦先生| 精品一区二区三区蜜桃| 国产在线麻豆精品观看| 国产精品系列在线观看| 成人美女视频在线观看18| 91在线精品一区二区| 欧美系列亚洲系列| 日韩久久久久久| 久久影院视频免费| 中文字幕一区二区三区乱码在线| 亚洲欧洲www| 亚洲成av人片观看| 国产一区二区主播在线| 成人av电影观看| 欧洲av在线精品| 欧美成人精品福利| 国产精品毛片无遮挡高清| 亚洲激情成人在线| 奇米一区二区三区| 成人免费高清视频在线观看| 一本大道综合伊人精品热热| 欧美一级黄色片| 国产精品美女www爽爽爽| 玉米视频成人免费看| 久久国产精品99精品国产| 成人v精品蜜桃久久一区| 在线国产电影不卡| 欧美不卡123| 亚洲欧洲av一区二区三区久久| 亚洲va在线va天堂| 成人h动漫精品一区二区| 制服丝袜日韩国产| 18涩涩午夜精品.www| 久久国产精品露脸对白| 在线观看免费亚洲| 国产日韩欧美制服另类| 婷婷夜色潮精品综合在线| 大胆亚洲人体视频| 日韩午夜激情av| 亚洲精品国产a| 国产精品综合久久| 91精品婷婷国产综合久久竹菊| 国产精品久久久久毛片软件| 免费成人av在线| 欧美主播一区二区三区美女| 中文字幕久久午夜不卡| 美美哒免费高清在线观看视频一区二区 | 天天av天天翘天天综合网色鬼国产 | 久久久精品tv| 日韩av午夜在线观看| 91女厕偷拍女厕偷拍高清| 精品国产91久久久久久久妲己 | 日韩av中文在线观看| 91麻豆免费看片| 国产亚洲短视频| 韩国女主播成人在线观看| 7878成人国产在线观看| 亚洲一区二区视频在线观看| 不卡一区中文字幕| 日本一区二区免费在线观看视频| 男女性色大片免费观看一区二区 | av一区二区三区| 久久久精品国产99久久精品芒果| 蜜臀va亚洲va欧美va天堂| 精品视频一区二区不卡| 亚洲色欲色欲www在线观看| 福利电影一区二区| 国产欧美久久久精品影院| 国产又黄又大久久| 欧美电视剧在线看免费| 麻豆中文一区二区| 精品国产乱码久久久久久夜甘婷婷| 日韩福利电影在线观看| 色香蕉久久蜜桃| 一区二区久久久久| 欧美性做爰猛烈叫床潮| 亚洲线精品一区二区三区八戒| 日本高清不卡一区| 一区二区三区欧美日| 欧美无乱码久久久免费午夜一区| 一区二区三区高清在线| 欧美日韩一区二区三区在线| 亚洲高清视频的网址| 欧美日韩国产精品自在自线| 日日摸夜夜添夜夜添精品视频| 欧美精品在线视频| 久久成人麻豆午夜电影| 久久久久99精品国产片| 成人午夜免费av| 亚洲精品成人天堂一二三| 欧美三级在线视频| 久久精品国产久精国产| 日本一区二区在线不卡| 色综合网站在线| 奇米精品一区二区三区四区| 久久嫩草精品久久久精品一| 波多野洁衣一区| 亚洲丰满少妇videoshd| 精品国产乱码久久久久久图片| 国产精品一区二区免费不卡 | 在线观看日韩国产| 日韩高清国产一区在线| 久久精品无码一区二区三区| 99久久伊人网影院| 午夜亚洲国产au精品一区二区 | 7777精品伊人久久久大香线蕉的 | 国产欧美日韩不卡免费| 色域天天综合网| 日韩av电影天堂| 国产色产综合色产在线视频| 95精品视频在线| 爽爽淫人综合网网站| 久久综合久久鬼色中文字| 91麻豆文化传媒在线观看| 久久精品999| 亚洲美女在线一区| 欧美mv日韩mv| 色综合久久综合| 国产一区不卡视频| 午夜成人在线视频| 国产精品美女久久久久久| 日韩一区二区免费电影| 97超碰欧美中文字幕| 国产一区在线视频| 亚洲一区av在线| 国产精品视频yy9299一区| 日韩精品影音先锋| 欧美日韩在线播放一区| 成人深夜在线观看| 美女国产一区二区| 天天综合网 天天综合色| 国产精品高潮呻吟| 精品国产一区久久| 欧美图片一区二区三区| 国产成人免费高清| 裸体健美xxxx欧美裸体表演| 一区二区在线观看视频| 国产精品狼人久久影院观看方式| 欧美一卡在线观看| 欧美性大战久久久久久久蜜臀| 成人国产精品免费观看| 精品写真视频在线观看| 日韩激情在线观看| 一级中文字幕一区二区| 国产精品久久三区| 日本一区二区三区在线观看| 久久综合九色综合97婷婷女人| 日韩视频一区二区三区在线播放| 欧美色图12p| 麻豆一区二区在线| 美国欧美日韩国产在线播放| 亚洲成a人片在线不卡一二三区| 成人欧美一区二区三区黑人麻豆 | 日韩三级中文字幕| 337p亚洲精品色噜噜| 欧美视频在线一区二区三区| 日本韩国欧美在线| 91久久精品一区二区三| 99精品欧美一区二区蜜桃免费| 国产成人啪免费观看软件| 韩日av一区二区| 国产成a人亚洲精品| 成人黄色一级视频| 色综合色狠狠天天综合色| 色综合天天综合网天天狠天天| 99精品热视频| 日本韩国欧美国产| 欧美日韩国产天堂| 制服丝袜日韩国产| 精品国产在天天线2019| 国产三级欧美三级日产三级99| 久久久久久久久岛国免费| 久久久欧美精品sm网站| 国产精品美女久久久久久2018| 自拍偷自拍亚洲精品播放| 亚洲另类色综合网站| 视频在线观看91| 国产另类ts人妖一区二区| 99久久99久久免费精品蜜臀| 在线中文字幕一区| 欧美一级xxx| 国产精品电影院| 丝袜脚交一区二区|