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

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

?? meastool.cpp

?? < VC++視頻音頻開發>> 這本書的源碼
?? 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一区二区三区免费野_久草精品视频
一区二区中文字幕在线| 一区在线观看视频| 床上的激情91.| 日韩写真欧美这视频| 亚洲国产aⅴ成人精品无吗| 99久久国产综合精品色伊| 国产视频一区不卡| 国产制服丝袜一区| 国产午夜亚洲精品羞羞网站| 欧美日韩激情一区二区三区| 亚洲自拍另类综合| 91超碰这里只有精品国产| 日本三级亚洲精品| 91麻豆精品国产91久久久使用方法| 高清久久久久久| 亚洲欧美日韩国产手机在线 | 免费观看91视频大全| 欧美一级片免费看| 国产一区二区三区在线观看免费视频 | 亚洲视频一二三区| 欧美在线高清视频| 夜夜操天天操亚洲| 欧美高清性hdvideosex| 国产麻豆视频一区二区| 天天综合色天天| 欧美α欧美αv大片| 国产资源精品在线观看| 首页国产欧美日韩丝袜| 久久精品水蜜桃av综合天堂| 日韩欧美资源站| 日韩一区二区三区三四区视频在线观看| 91免费观看国产| 日韩高清不卡一区二区| 亚洲国产日产av| 亚洲一区二区三区爽爽爽爽爽| 亚洲欧洲av色图| 亚洲视频一二三| 亚洲欧美经典视频| 亚洲欧美日韩一区二区| 亚洲欧美在线aaa| 亚洲视频在线观看三级| 亚洲裸体xxx| 欧美精品久久久久久久久老牛影院| 91福利在线免费观看| 国产精品一区二区免费不卡 | 国产在线精品免费av| 免费观看成人鲁鲁鲁鲁鲁视频| 男男gaygay亚洲| 麻豆国产91在线播放| 国产精品污污网站在线观看| 91黄色免费看| 欧美人伦禁忌dvd放荡欲情| 欧美一区二区免费观在线| 欧美一区二区成人| 精品久久久久一区| 国产精品久99| 久久婷婷色综合| 欧美视频中文字幕| 99久久精品免费观看| 欧美系列在线观看| 欧美一区二区精品| 久久久三级国产网站| 日韩女优av电影| 欧美日本精品一区二区三区| 日韩视频免费观看高清在线视频| 精品粉嫩aⅴ一区二区三区四区| 欧美性猛交xxxx黑人交| 欧美成人一区二区三区 | 亚瑟在线精品视频| 中文字幕一区二区三区视频| 亚洲午夜电影网| 久久国产精品99精品国产| 日韩高清在线观看| 国产在线精品免费av| 色呦呦国产精品| 成人精品鲁一区一区二区| 狠狠v欧美v日韩v亚洲ⅴ| 豆国产96在线|亚洲| 欧美日韩亚洲综合在线| 色婷婷av一区二区三区大白胸| 欧美日韩精品免费| 久久亚洲精华国产精华液 | 蜜乳av一区二区三区| 岛国精品一区二区| 欧美日韩亚洲另类| 国产亚洲欧美日韩日本| 亚洲一区二区三区四区在线免费观看| 免费人成精品欧美精品| eeuss鲁一区二区三区| 成人免费视频播放| 欧美精品第1页| 中文字幕中文字幕一区二区| 石原莉奈在线亚洲二区| 成人精品视频.| 这里是久久伊人| |精品福利一区二区三区| 美女视频黄频大全不卡视频在线播放| 成人激情午夜影院| 日韩精品一区二区三区三区免费| 国产精品对白交换视频| 黑人精品欧美一区二区蜜桃| 在线观看亚洲精品视频| 国产日韩欧美制服另类| 1024国产精品| 国产一区二三区| 555www色欧美视频| 亚洲久本草在线中文字幕| 国产乱码精品一区二区三| 欧美高清dvd| 夜夜爽夜夜爽精品视频| 国产凹凸在线观看一区二区| 日韩一区二区免费电影| 亚洲国产精品自拍| 91在线观看污| 中文字幕免费一区| 亚洲黄色免费网站| 成人美女视频在线观看| 久久久www免费人成精品| 日本午夜一本久久久综合| 欧美性受xxxx| 又紧又大又爽精品一区二区| 成人精品免费看| 国产欧美一区在线| 福利一区二区在线观看| 久久综合久久鬼色| 韩国av一区二区三区在线观看| 欧美一区二区三区在线看| 午夜精品爽啪视频| 欧美无乱码久久久免费午夜一区| 亚洲视频一二区| 91视频观看视频| 综合久久久久久| 99视频国产精品| 中文字幕一区视频| 91蝌蚪porny九色| 一区二区三区日韩| 一本色道久久综合狠狠躁的推荐| 亚洲色图.com| 欧美综合天天夜夜久久| 亚洲愉拍自拍另类高清精品| 欧美在线免费视屏| 五月激情丁香一区二区三区| 欧美精品三级在线观看| 免费高清成人在线| 精品国产麻豆免费人成网站| 国产一区三区三区| 国产午夜精品理论片a级大结局 | 日韩影院免费视频| 欧美大片在线观看一区二区| 激情五月激情综合网| 久久久午夜精品| 99视频在线精品| 一个色在线综合| 91精品福利在线一区二区三区| 美女任你摸久久| 久久久国产精品不卡| 成人av第一页| 亚洲伊人伊色伊影伊综合网| 4438x成人网最大色成网站| 韩国理伦片一区二区三区在线播放| 国产亚洲一区二区在线观看| a在线欧美一区| 午夜天堂影视香蕉久久| 欧美大片一区二区| 99久久婷婷国产精品综合| 午夜电影一区二区| 久久综合九色综合欧美亚洲| 91在线视频播放地址| 午夜电影一区二区| 日本一区二区免费在线观看视频 | 日韩一级二级三级精品视频| 国产在线播放一区二区三区| 亚洲欧美日韩系列| 欧美放荡的少妇| 国产成人啪午夜精品网站男同| 日韩欧美激情一区| 成人深夜在线观看| 亚洲无线码一区二区三区| 久久―日本道色综合久久| 91一区二区在线观看| 男人的j进女人的j一区| 国产精品久久久久久久久快鸭| 欧美日韩精品一区二区| 国产成人8x视频一区二区| 午夜久久福利影院| 亚洲国产精品二十页| 欧美一区二区国产| 色婷婷av一区二区三区gif| 国产一区 二区| 五月开心婷婷久久| 综合婷婷亚洲小说| 欧美videos中文字幕| 欧美色图一区二区三区| 国产高清一区日本| 日本不卡一区二区三区高清视频| 国产精品久久看| 精品国产乱码久久久久久闺蜜| 在线观看视频欧美| 国产不卡视频一区| 精品一区二区三区蜜桃|