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

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

?? dsdemodlg.cpp

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

#include "stdafx.h"
#include "DsDemo.h"
#include "DsDemoDlg.h"


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

/////////////////////////////////////////////////////////////////////////////
// CDsDemoDlg dialog

CDsDemoDlg::CDsDemoDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDsDemoDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDsDemoDlg)
		// 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 CDsDemoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDsDemoDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDsDemoDlg, CDialog)
	//{{AFX_MSG_MAP(CDsDemoDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDsDemoDlg message handlers

BOOL CDsDemoDlg::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 CDsDemoDlg::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 CDsDemoDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}


/////////////////////////////////////////////////////////////////////////
// 枚舉Filter上的Pin
IPin * CDsDemoDlg::GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir)
{
    BOOL       bFound = FALSE;
    IEnumPins  *pEnum;
    IPin       *pPin;

    HRESULT hr = pFilter->EnumPins(&pEnum);
    if (FAILED(hr))
    {
        return NULL;
    }
    while(pEnum->Next(1, &pPin, 0) == S_OK)
    {
        PIN_DIRECTION PinDirThis;
        pPin->QueryDirection(&PinDirThis);
        if (bFound = (PinDir == PinDirThis))
            break;
        pPin->Release();
    }
    pEnum->Release();
    return (bFound ? pPin : NULL); 
}

// 枚舉Pin上的媒體類型
BOOL CDsDemoDlg::GetMediaType(IPin * inPin)
{
	IEnumMediaTypes * pMTEnum = NULL; 
	AM_MEDIA_TYPE *   pAMType = NULL;
	if (SUCCEEDED(inPin->EnumMediaTypes(&pMTEnum)))
	{
		ASSERT(pMTEnum);
		while (pMTEnum->Next(1, &pAMType, 0) == S_OK)
		{
			// 對取得的媒體類型進行處理
			// ...

			DeleteMediaType(pAMType);
		}
		pMTEnum->Release();
		return TRUE;
	}
	return FALSE;
}

// 判斷某個Filter是否已經注冊
BOOL CDsDemoDlg::IsFilterRegistered(CLSID inFilterId)
{
	IBaseFilter * pFilter = NULL;
	if (SUCCEEDED(CoCreateInstance(inFilterId, NULL, CLSCTX_INPROC_SERVER,
		IID_IBaseFilter, (void **)&pFilter)))
	{
		pFilter->Release();
		return TRUE;
	}
	return FALSE;
}

// 在程序中注冊某個Filter文件
BOOL CDsDemoDlg::RegisterFilter(const char * inFilterAx)
{
	typedef (WINAPI * REGISTER_FUNC) (void);
	REGISTER_FUNC   MyFunc = NULL;

	HMODULE hModule = ::LoadLibrary(inFilterAx);
	if (hModule)
	{
		MyFunc = (REGISTER_FUNC) GetProcAddress(hModule, "DllRegisterServer");
		BOOL pass = (MyFunc != NULL);
		if (pass)
		{
			MyFunc();
		}
		::FreeLibrary(hModule);
		return pass;
	}

	return FALSE;
}

// 修改Filter的Merit值
BOOL CDsDemoDlg::SetFilterMerit(const char * inClsid, DWORD inMerit)
{
	typedef struct
	{
		DWORD	dwVersion;    // 版本號
		DWORD	dwMerit;      // Merit值
		DWORD	dwPinCount;   // Pin的數量
		DWORD	dwReserved;   // 保留
	} FILTER_HEADER;

	const char *  cRegistryEntry = "CLSID\\{083863F1-70DE-11d0-BD40-00A0C911CE86}\\Instance\\";
	const long    cMaxLength = 1024 * 16;
	BYTE          filterData[cMaxLength];
	DWORD         actualLength = 0;

	// 生成Filter信息注冊部分的注冊表入口
	char   szEntry[1000];
	strcpy(szEntry, cRegistryEntry);
	strcat(szEntry, inClsid);
	
	HKEY hKey   = NULL;
	LONG result = ::RegOpenKeyEx(HKEY_CLASSES_ROOT, szEntry, 0, KEY_ALL_ACCESS, &hKey);
	BOOL pass = (result == ERROR_SUCCESS);
	if (pass)
	{
		// 讀取FilterData的值
		actualLength = actualLength;
		result = ::RegQueryValueEx(hKey, "FilterData", NULL, NULL, filterData, &actualLength);
		pass   = (result == ERROR_SUCCESS);
	}
	if (pass)
	{
		// 修改FiterData中Merit部分,然后寫回到注冊表
		FILTER_HEADER * filterHeader = (FILTER_HEADER *) filterData;
		filterHeader->dwMerit = inMerit;
		result = ::RegSetValueEx(hKey, "FilterData", NULL, REG_BINARY, filterData, actualLength);
		pass   = (result == ERROR_SUCCESS);
	}
	if (hKey)
	{
		::RegCloseKey(hKey);
	}
	return pass;
}

// 判斷采集卡類型:VFW or WDM
BOOL CDsDemoDlg::IsVFWCard(IBaseFilter * pDeviceFilter)
{
	ASSERT(pDeviceFilter);

	IAMVfwCaptureDialogs * pVfw = NULL;
	HRESULT hr = pDeviceFilter->QueryInterface(IID_IAMVfwCaptureDialogs, (void**)&pVfw);
	if (SUCCEEDED(hr))
	{
		// This is a VFW card...
		pVfw->Release();
		
		return TRUE;
	}
	else
	{
		// Maybe this is a WDM card...

		return FALSE;
	}
}

BOOL CDsDemoDlg::IsWDMCard(IBaseFilter * pDeviceFilter)
{
	ASSERT(pDeviceFilter);

	IAMAnalogVideoDecoder * pWdm = NULL;
	HRESULT hr = pDeviceFilter->QueryInterface(IID_IAMAnalogVideoDecoder, (void**)&pWdm);
	if (SUCCEEDED(hr))
	{
		// This is a WDM card...
		pWdm->Release();
		
		return TRUE;
	}
	else
	{
		// Maybe this is a VFW card...

		return FALSE;
	}
}



HRESULT InitCaptureGraphBuilder(
  IGraphBuilder **ppGraph,  // Receives the pointer.
  ICaptureGraphBuilder2 **ppBuild  // Receives the pointer.
)
{
    if (!ppGraph || !ppBuild)
    {
        return E_POINTER;
    }
    IGraphBuilder *pGraph = NULL;
    ICaptureGraphBuilder2 *pBuild = NULL;

    // Create the Capture Graph Builder.
    HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, 
        CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pGraph);
    if (SUCCEEDED(hr))
    {
        // Create the Filter Graph Manager.
        hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER,
            IID_IGraphBuilder, (void**)&pGraph);
        if (SUCCEEDED(hr))
        {
            // Initialize the Capture Graph Builder.
            pBuild->SetFiltergraph(pGraph);

            // Return both interface pointers to the caller.
            *ppBuild = pBuild;
            *ppGraph = pGraph; // The caller must release both interfaces.
            return S_OK;
        }
        else
        {
            pBuild->Release();
        }
    }
    return hr; // Failed
}

// 輔助函數:在Crossbar Filter上查找指定類型的Pin
HRESULT FindCrossbarPin(
    IAMCrossbar *pXBar,                 // Pointer to the crossbar.
    PhysicalConnectorType PhysicalType, // Pin type to match.
    PIN_DIRECTION Dir,                  // Pin direction.
    long *pIndex)       // Receives the index of the pin, if found.
{
    BOOL bInput = (Dir == PINDIR_INPUT ? TRUE : FALSE);

    // Find out how many pins the crossbar has.
    long cOut, cIn;
    HRESULT hr = pXBar->get_PinCounts(&cOut, &cIn);
    if (FAILED(hr)) return hr;
    // Enumerate pins and look for a matching pin.
    long count = (bInput ? cIn : cOut);
    for (long i = 0; i < count; i++)
    {
        long iRelated = 0;
        long ThisPhysicalType = 0;
        hr = pXBar->get_CrossbarPinInfo(bInput, i, &iRelated,
            &ThisPhysicalType);
        if (SUCCEEDED(hr) && ThisPhysicalType == PhysicalType)
        {
            // Found a match, return the index.
            *pIndex = i;
            return S_OK;
        }
    }
    // Did not find a matching pin.
    return E_FAIL;
}

// 輔助函數:在Crossbar Filter上查找Audio Decoder Out Pin和Audio Tuner In Pin,
// 調用IAMCrossbar::Route函數進行電視聲音的導通或者斷開
HRESULT ConnectAudio(IAMCrossbar *pXBar, BOOL bActivate)
{
    // Look for the Audio Decoder output pin.
    long i = 0;
    HRESULT hr = FindCrossbarPin(pXBar, PhysConn_Audio_AudioDecoder,
        PINDIR_OUTPUT, &i);
    if (SUCCEEDED(hr))
    {
        if (bActivate)  // Activate the audio. 
        {
            // Look for the Audio Tuner input pin.
            long j = 0;
            hr = FindCrossbarPin(pXBar, PhysConn_Audio_Tuner, 
                PINDIR_INPUT, &j);
            if (SUCCEEDED(hr))
            {
                return pXBar->Route(i, j);
            }
        }
        else  // Mute the audio
        {
            return pXBar->Route(i, -1);
        }
    }
    return E_FAIL;
}

// 激活(或者關閉)電視聲音,考慮到采集卡帶有兩個Crossbar Filter的情況
HRESULT ActivateAudio(ICaptureGraphBuilder2 *pBuild, IBaseFilter *pSrc,
  BOOL bActivate)
{
    // Search upstream for a crossbar.
    IAMCrossbar *pXBar1 = NULL;
    HRESULT hr = pBuild->FindInterface(&LOOK_UPSTREAM_ONLY, NULL, pSrc,
        IID_IAMCrossbar, (void**)&pXBar1);
    if (SUCCEEDED(hr)) 
    {
        hr = ConnectAudio(pXBar1, bActivate);
        if (FAILED(hr))
        {
            // Look for another crossbar.
            IBaseFilter *pF = NULL;
            hr = pXBar1->QueryInterface(IID_IBaseFilter, (void**)&pF);
            if (SUCCEEDED(hr)) 
            {
                // Search upstream for another one.
                IAMCrossbar *pXBar2 = NULL;
                hr = pBuild->FindInterface(&LOOK_UPSTREAM_ONLY, NULL, pF,
                    IID_IAMCrossbar, (void**)&pXBar2);
                pF->Release();
                if (SUCCEEDED(hr))
                {
                    hr = ConnectAudio(pXBar2, bActivate);
                    pXBar2->Release();
                }
            }
        }
        pXBar1->Release();
    }
    return hr;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九九视频精品免费| 经典一区二区三区| 国产精品久久精品日日| 国产亚洲欧美日韩日本| 久久精品一区二区三区av| 久久综合资源网| 国产午夜亚洲精品午夜鲁丝片| 精品久久人人做人人爱| 久久久久久久综合狠狠综合| 欧美国产精品中文字幕| 中文字幕一区二区三区蜜月| 亚洲卡通动漫在线| 午夜精品福利在线| 国产美女在线观看一区| 成人av在线影院| 在线视频一区二区三| 91精品福利在线一区二区三区| 精品国产亚洲一区二区三区在线观看| 久久精品在这里| 中文字幕在线不卡视频| 亚洲成av人片一区二区| 美女一区二区视频| 99精品视频中文字幕| 欧美日韩日日摸| 久久久国产精品麻豆| 亚洲色图在线视频| 日韩国产欧美在线播放| 99国产精品久久久久久久久久久| 欧亚一区二区三区| 精品美女在线播放| 国产精品天美传媒沈樵| 婷婷丁香激情综合| 国产精品99久久久久久久vr| 在线免费观看成人短视频| 日韩精品一区二区三区视频播放| 欧美激情一区二区三区在线| 五月婷婷欧美视频| aa级大片欧美| www国产亚洲精品久久麻豆| 亚洲免费视频中文字幕| 九色综合国产一区二区三区| 欧美在线视频你懂得| 久久久久国产精品免费免费搜索| 一片黄亚洲嫩模| 丁香婷婷综合网| 69精品人人人人| 一区二区三区在线免费观看| 精品一区二区三区蜜桃| 欧美日韩一区视频| 亚洲欧美日韩电影| 国产大陆亚洲精品国产| 欧美一级理论性理论a| 亚洲欧美aⅴ...| 成人免费看的视频| 久久精品一区二区三区四区| 日韩av一区二区在线影视| 日本道免费精品一区二区三区| 日本一区二区三级电影在线观看 | www.成人网.com| 日韩你懂的在线播放| 一级特黄大欧美久久久| 成人久久18免费网站麻豆| 久久久久亚洲综合| 国产精品综合一区二区三区| 日韩丝袜情趣美女图片| 日韩精彩视频在线观看| 欧美日韩黄视频| 亚洲一区二区三区四区五区中文| 99re亚洲国产精品| 国产精品久久国产精麻豆99网站| 成人一区二区三区| 亚洲国产精品v| www.激情成人| 亚洲综合色区另类av| 色欧美日韩亚洲| 一区二区成人在线| 欧美伦理视频网站| 老司机一区二区| 精品国产制服丝袜高跟| 国产九色sp调教91| 中文字幕一区二区三区乱码在线| 91老师片黄在线观看| 亚洲一区在线观看免费观看电影高清| 91成人免费在线| 日本午夜精品视频在线观看| 26uuu色噜噜精品一区二区| 黄页视频在线91| 国产精品乱人伦中文| 99re成人精品视频| 亚洲成人黄色小说| 2020国产精品| 色香色香欲天天天影视综合网| 亚洲一区二区av电影| 欧美一级夜夜爽| 国产成人综合亚洲91猫咪| 国产精品国产三级国产aⅴ无密码| 色婷婷久久一区二区三区麻豆| 偷拍亚洲欧洲综合| 精品99999| 91视频观看视频| 蜜臀av性久久久久蜜臀aⅴ流畅 | 成人国产一区二区三区精品| 亚洲人成人一区二区在线观看| 在线视频你懂得一区二区三区| 奇米色一区二区三区四区| 久久精品视频网| 色欧美日韩亚洲| 韩国欧美国产1区| 亚洲欧美激情视频在线观看一区二区三区 | 精品福利av导航| 成人丝袜高跟foot| 亚洲国产精品一区二区久久恐怖片| 日韩欧美一级二级三级| 91丨porny丨首页| 久久精品国产秦先生| 亚洲欧美色综合| 精品国产乱码久久久久久老虎 | 免费不卡在线观看| 国产精品拍天天在线| 欧美精品1区2区3区| 99re视频精品| 成人性生交大片免费看视频在线| 亚洲福利视频三区| 国产精品电影一区二区三区| 欧美一区二区啪啪| 欧洲激情一区二区| 波多野结衣91| 久久国产日韩欧美精品| 亚洲制服欧美中文字幕中文字幕| 久久网站最新地址| 日韩亚洲欧美成人一区| 日本韩国精品一区二区在线观看| 高清国产一区二区| 国内外精品视频| 美女脱光内衣内裤视频久久影院| 亚洲一二三级电影| 亚洲欧美韩国综合色| 亚洲视频一区在线观看| 国产精品人人做人人爽人人添 | 成人小视频在线| 久久国产视频网| 麻豆精品久久精品色综合| 亚洲午夜国产一区99re久久| 亚洲精品免费在线| 自拍偷拍欧美激情| 亚洲视频在线观看三级| 最新国产成人在线观看| 中文字幕亚洲精品在线观看| 国产精品大尺度| 国产精品久久久久久久久免费桃花| 久久久精品中文字幕麻豆发布| 精品福利在线导航| 久久无码av三级| 国产日韩精品一区二区三区在线| 久久一二三国产| 国产欧美精品一区二区色综合 | 欧美精三区欧美精三区| 欧美私人免费视频| 欧美一区二区三区不卡| 精品少妇一区二区三区视频免付费| 日韩一区二区精品在线观看| 日韩精品一区二区三区视频在线观看| 欧美电视剧免费观看| 2017欧美狠狠色| 亚洲欧美综合色| 亚洲成人资源网| 麻豆精品蜜桃视频网站| 国产白丝精品91爽爽久久| 99视频热这里只有精品免费| 91福利小视频| 欧美一区二区女人| 国产精品国产三级国产有无不卡| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲精品成人悠悠色影视| 日本大胆欧美人术艺术动态| 国产精品中文字幕一区二区三区| 97国产精品videossex| 欧美精品日韩一本| 国产午夜精品一区二区三区视频| 亚洲精品美国一| 久久精品国产精品亚洲综合| 99久久综合狠狠综合久久| 欧美另类久久久品| 国产农村妇女毛片精品久久麻豆| 亚洲一区二区在线免费观看视频| 久久精品国产99国产| 99久久精品一区| 久久综合色婷婷| 一区二区三区四区av| 加勒比av一区二区| 91国偷自产一区二区三区观看 | 麻豆久久一区二区| av成人免费在线观看| 欧美一级片在线| 一区免费观看视频| 国产精品自拍一区| 欧美高清一级片在线| 18涩涩午夜精品.www| 激情久久五月天| 91麻豆精品国产91久久久久|