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

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

?? meastool.cpp

?? VC++視頻開發實例集錦(包括“遠程視頻監控”"語音識別系統"等13個經典例子)
?? CPP
字號:
//-----------------------------------------------------------------------------
// 文件名: meastool.cpp
//
// 描  述: 實現一個繼承自IDirectMusicTool,用以更新一個UI正方形,使其在調節時閃爍紅光,
//         在敲擊時閃爍綠光。
//-----------------------------------------------------------------------------
#include <dmusici.h>
#include "MeasTool.h"
#include "resource.h"

CMeasureTool* g_pMusicTool = NULL;

//-----------------------------------------------------------------------------
// 函數名: CMeasureTool::CMeasureTool()
// 描  述:  
//-----------------------------------------------------------------------------
CMeasureTool::CMeasureTool(HWND hwndParent)
{
    m_cRef = 1;             // // 設置為1,可調用Release()釋放
    m_hwndParent = hwndParent;
    g_pMusicTool = this;
}




//-----------------------------------------------------------------------------
// 函數名: CMeasureTool::~CMeasureTool()
// 描  述:  
//-----------------------------------------------------------------------------
CMeasureTool::~CMeasureTool()
{
}




//-----------------------------------------------------------------------------
// 函數名: CMeasureTool::QueryInterface()
// 描  述:  
//-----------------------------------------------------------------------------
STDMETHODIMP CMeasureTool::QueryInterface(const IID &iid, void **ppv)
{
    if (iid == IID_IUnknown || iid == IID_IDirectMusicTool)
    {
        *ppv = static_cast<IDirectMusicTool*>(this);
    } 
    else
    {
        *ppv = NULL;
        return E_NOINTERFACE;
    }
    
    reinterpret_cast<IUnknown*>(this)->AddRef();
    return S_OK;
}




//-----------------------------------------------------------------------------
// 函數名: CMeasureTool::AddRef()
// 描  述:  
//-----------------------------------------------------------------------------
STDMETHODIMP_(ULONG) CMeasureTool::AddRef()
{
    return InterlockedIncrement(&m_cRef);
}




//-----------------------------------------------------------------------------
// 函數名: CMeasureTool::Release()
// 描  述:  
//-----------------------------------------------------------------------------
STDMETHODIMP_(ULONG) CMeasureTool::Release()
{
    if( 0 == InterlockedDecrement(&m_cRef) )
    {
        delete this;
        return 0;
    }

    return m_cRef;
}




//-----------------------------------------------------------------------------
// 函數名: CMeasureTool::Init()
// 描  述:  
//-----------------------------------------------------------------------------
HRESULT STDMETHODCALLTYPE CMeasureTool::Init( IDirectMusicGraph* pGraph )
{
    // 本工具不需要任何初始化
    return E_NOTIMPL;
}




//-----------------------------------------------------------------------------
// 函數名: CMeasureTool::GetMsgDeliveryType()
// 描  述:  
//-----------------------------------------------------------------------------
HRESULT STDMETHODCALLTYPE CMeasureTool::GetMsgDeliveryType( DWORD* pdwDeliveryType )
{
    // 本工具需要消息在消息被處理的時刻。 
    // 如此以便"敲擊指示器"在敲擊時閃爍而不是之前
    *pdwDeliveryType = DMUS_PMSGF_TOOL_ATTIME;
    return S_OK;
}




//-----------------------------------------------------------------------------
// 函數名: CMeasureTool::GetMediaTypeArraySize()
// 描  述:  
//-----------------------------------------------------------------------------
HRESULT STDMETHODCALLTYPE CMeasureTool::GetMediaTypeArraySize( DWORD* pdwNumElements )
{
    // 這個工具只需要note、patch、sysex和MIDI四種消息, 
    // 所以*pdwNumElements為4.
    
    *pdwNumElements = 1;
    return S_OK;
}




//-----------------------------------------------------------------------------
// 函數名: CMeasureTool::GetMediaTypes()
// 描  述:  
//-----------------------------------------------------------------------------
HRESULT STDMETHODCALLTYPE CMeasureTool::GetMediaTypes( DWORD** padwMediaTypes, 
                                                    DWORD dwNumElements )
{
	// 用本工具想要處理的消息的類型來填充padwMediaTypes數組。
    // 本例中dwNumElements將為3, 因為該數據是從GetMediaTypeArraySize()返回的。 
    
    if( dwNumElements == 1 )
    {
        // 設置數組的元素為DMUS_PMSGT_NOTE,
        // DMUS_PMSGT_MIDI, and DMUS_PMSGT_PATCH
        (*padwMediaTypes)[0] = DMUS_PMSGT_NOTIFICATION;
        return S_OK;
    }
    else
    {
        // 這應該不會發生
        return E_FAIL;
    }
}


// ------------------------------------------------------------------------------
#define DUMPGUID(g)     if (pNotiMsg->guidNotificationType == (g))  OutputDebugString(#g "\n")

//-----------------------------------------------------------------------------
// 函數名: CMeasureTool::ProcessPMsg()
// 描  述:  
//-----------------------------------------------------------------------------
HRESULT STDMETHODCALLTYPE 
CMeasureTool::ProcessPMsg
( 
    IDirectMusicPerformance* pPerf, 
    DMUS_PMSG*               pPMsg 
)
{
    DMUS_NOTIFICATION_PMSG*  pNotiMsg = (DMUS_NOTIFICATION_PMSG*)pPMsg;

 // 返回S_FREE釋放消息. 如果StampPMsg()失敗,沒有此消息的目的地,因此釋放它
    if(( NULL == pPMsg->pGraph ) ||
        FAILED(pPMsg->pGraph->StampPMsg(pPMsg)))
    {
        return DMUS_S_FREE;
    }

    // 本工具被設置只接受DMUS_PMSGT_NOTIFICATION類型的消息
    if (pNotiMsg->guidNotificationType == GUID_NOTIFICATION_MEASUREANDBEAT)
    {
        if (pNotiMsg->dwField1 == 0)
            Blink(eMeasure);
        else
            Blink(eBeat);
    }    

    //返回DMUS_S_REQUEUE,因此原始消息被重新排列 
    return DMUS_S_REQUEUE;
}

//-----------------------------------------------------------------------------
// 函數名: CMeasureTool::Flush()
// 描  述:  
//-----------------------------------------------------------------------------
HRESULT STDMETHODCALLTYPE CMeasureTool::Flush( IDirectMusicPerformance* pPerf, 
                                            DMUS_PMSG* pDMUS_PMSG,
                                            REFERENCE_TIME rt)
{
    // 不需要流
    return E_NOTIMPL;
}


// ------------------------------------------------------------------------------
// 函數名: CMeasureTool::Blink()
// 描  述:  
// ------------------------------------------------------------------------------
void CMeasureTool::Blink(EBeatType eType)
{
    HWND hwndBox = GetDlgItem(m_hwndParent, IDC_BLINKY);

    if (hwndBox)
    {
        HDC         hdcBox = GetDC(hwndBox);
        RECT        rcBox;
        HBRUSH      hbrColored, hbrOld;
        COLORREF    color = RGB(0, 0, 0); 
        UINT        nTimerId = 0;  // 使用'this'作為一個LUID
        
        switch (eType)
        {
            case eOff:
                KillTimer(m_hwndParent, nTimerId);    
                color = GetSysColor(COLOR_3DFACE);
                break;
            case eMeasure:
                SetTimer(m_hwndParent, nTimerId, 100, Unblink);
                color = RGB(255, 0, 0); // 在調節時閃爍紅光
                break;
            case eBeat:
                SetTimer(m_hwndParent, nTimerId, 100, Unblink);
                color = RGB(0, 255, 0); // 在敲擊時閃爍綠光
        }
        
        hbrColored = (HBRUSH)CreateSolidBrush(color);
        hbrOld = (HBRUSH)SelectObject(hdcBox, hbrColored);

        GetClientRect(hwndBox, &rcBox);
        Rectangle(hdcBox, rcBox.left, rcBox.top, rcBox.right, rcBox.bottom);

        SelectObject(hdcBox, hbrOld);
        DeleteObject(hbrColored);
        ReleaseDC(hwndBox, hdcBox);
    }
}

// ------------------------------------------------------------------------------
// ------------------------------------------------------------------------------
void CALLBACK Unblink
(
    HWND        hwnd,
    UINT        uMsg,
    UINT_PTR    idEvent,
    DWORD       dwTime
)
{
    if( g_pMusicTool )
        g_pMusicTool->Blink(eOff);
}
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲6080在线| 日韩久久一区二区| 日韩—二三区免费观看av| 欧美日韩不卡在线| 美女脱光内衣内裤视频久久网站 | 一区二区在线观看免费 | 国产91高潮流白浆在线麻豆| 国产亚洲综合色| 99久久免费精品| 亚洲电影一区二区三区| 日韩亚洲电影在线| 粉嫩一区二区三区性色av| 亚洲品质自拍视频网站| 在线播放中文一区| 国内精品国产成人国产三级粉色| 国产人成一区二区三区影院| 91网上在线视频| 奇米777欧美一区二区| 久久九九影视网| 色乱码一区二区三区88| 日韩av一二三| 国产精品久久影院| 91麻豆精品国产| 国产成人鲁色资源国产91色综 | 国产成人精品免费视频网站| 亚洲免费av网站| 欧美一区二区三区爱爱| 成人午夜碰碰视频| 日本91福利区| 国产精品乱码一区二三区小蝌蚪| 日本韩国精品在线| 国产成人av在线影院| 丝袜美腿亚洲综合| 综合在线观看色| 日韩欧美亚洲国产另类| 日本高清不卡在线观看| 国产酒店精品激情| 婷婷国产在线综合| 亚洲色图欧洲色图婷婷| 精品理论电影在线| 欧美日韩色一区| 91天堂素人约啪| 国产乱码精品一区二区三区av| 亚洲一区二区三区三| 国产婷婷色一区二区三区四区 | 一区二区免费在线播放| 久久久久国产精品麻豆| 51久久夜色精品国产麻豆| 91猫先生在线| 国产成人鲁色资源国产91色综| 日韩精品乱码av一区二区| 一区二区三区毛片| 国产精品狼人久久影院观看方式| 精品乱码亚洲一区二区不卡| 欧美日韩另类一区| 欧美在线观看18| 9久草视频在线视频精品| 国产一区二区三区综合| 麻豆91免费看| 首页国产欧美日韩丝袜| 亚洲黄一区二区三区| 国产精品嫩草影院com| 欧美xxx久久| 日韩一区二区三区免费看| 欧美日韩视频专区在线播放| 色女孩综合影院| 一道本成人在线| 91美女片黄在线观看| 一本在线高清不卡dvd| kk眼镜猥琐国模调教系列一区二区| 极品美女销魂一区二区三区| 蜜桃免费网站一区二区三区| 日韩精品亚洲专区| 日本不卡视频一二三区| 日本不卡123| 久久99精品久久久久久| 麻豆国产精品777777在线| 久久福利资源站| 国产在线播放一区| 国产精品香蕉一区二区三区| 国产精品亚洲成人| 成人免费毛片aaaaa**| 国产成人在线免费| 成人久久久精品乱码一区二区三区| 懂色av中文一区二区三区| 99热精品一区二区| 在线区一区二视频| 欧美精品丝袜久久久中文字幕| 欧美日韩国产精选| 精品久久久久久久久久久久久久久久久| 日韩欧美国产电影| 国产欧美日韩在线视频| 国产精品免费视频网站| 亚洲男人天堂av网| 日韩激情视频在线观看| 久久国产精品色婷婷| 高清成人在线观看| 欧美自拍偷拍午夜视频| 日韩亚洲欧美一区| 久久久精品综合| |精品福利一区二区三区| 亚洲一区在线播放| 玖玖九九国产精品| 成年人午夜久久久| 欧美精品1区2区3区| 亚洲精品在线免费播放| 亚洲欧美另类图片小说| 青青草原综合久久大伊人精品优势 | 国产伦精品一区二区三区免费迷| 成人免费黄色在线| 欧美日韩午夜影院| 久久美女高清视频| 亚洲中国最大av网站| 美女视频黄 久久| 丁香六月久久综合狠狠色| 欧美在线观看一区二区| 精品国产乱码久久久久久牛牛 | 日本vs亚洲vs韩国一区三区二区| 国产一区二区三区在线观看免费视频| 波多野结衣欧美| 欧美精品1区2区| 中文字幕一区视频| 极品美女销魂一区二区三区| 色综合夜色一区| 久久久久久久电影| 无码av免费一区二区三区试看 | 亚洲夂夂婷婷色拍ww47| 另类小说色综合网站| 色嗨嗨av一区二区三区| xnxx国产精品| 午夜视黄欧洲亚洲| 99久久精品免费| 久久夜色精品国产欧美乱极品| 亚洲精品国产精品乱码不99| 国产精品主播直播| 日韩欧美三级在线| 亚洲成人av一区二区三区| eeuss鲁片一区二区三区| 日韩一区二区三区四区| 亚洲国产精品麻豆| av在线不卡电影| 久久久亚洲综合| 蜜臀va亚洲va欧美va天堂| 色哟哟国产精品免费观看| 国产日韩三级在线| 久久99精品久久久久久| 91精品国产综合久久久久久| 亚洲日本va午夜在线影院| 国产经典欧美精品| 精品国产百合女同互慰| 日本欧美大码aⅴ在线播放| 欧美自拍丝袜亚洲| 亚洲综合在线免费观看| 99视频一区二区| 中文字幕一区二区三区色视频| 国产精品一区二区x88av| 精品福利在线导航| 免费成人av在线| 欧美高清视频不卡网| 亚洲一区二区三区爽爽爽爽爽| 91在线视频免费91| 国产精品久久免费看| 波多野结衣在线一区| 欧美精彩视频一区二区三区| 国产在线精品免费| 精品久久国产字幕高潮| 激情综合色播激情啊| 久久午夜电影网| 国产在线一区观看| 国产性天天综合网| 国产福利不卡视频| 中文字幕av不卡| 97se亚洲国产综合自在线| 日韩美女久久久| 欧洲一区二区三区免费视频| 亚洲一区中文在线| 欧美日韩国产a| 免费亚洲电影在线| 亚洲精品在线一区二区| 国产精品影视天天线| 亚洲国产成人自拍| 一本色道久久综合狠狠躁的推荐| 一区二区三区四区不卡在线| 欧美日韩另类一区| 精品亚洲欧美一区| 中文字幕av一区二区三区高| 91欧美激情一区二区三区成人| 亚洲资源中文字幕| 欧美成人三级电影在线| 国产一二三精品| 亚洲天堂2016| 欧美精品tushy高清| 国产一区视频导航| 综合电影一区二区三区| 欧美另类高清zo欧美| 国产在线视频精品一区| 自拍视频在线观看一区二区| 欧美性极品少妇| 韩国欧美国产一区| 亚洲另类春色国产|