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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ch3p1_playaudio.cpp

?? 游戲開發(fā)特殊技巧-special.effects.game.programming
?? CPP
字號:
/*
#############################################################################

  Ch3p1_PlayAudio.cpp: a program that demonstrates how to play audio using
  DirectMusic.

  This program is based on the PlayAudio DirectMusic sample program
  contained in the DirectX SDK.

#############################################################################
*/

#define STRICT
#include <windows.h>
#include <basetsd.h>
#include <commdlg.h>
#include <commctrl.h>
#include <dmusicc.h>
#include <dmusici.h>
#include <dxerr8.h>
#include <tchar.h>
#include "Ch3p1_resource.h"
#include "DMUtil.h"
#include "DXUtil.h"

//-----------------------------------------------------------------------------
// Function-prototypes
//-----------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam );
HRESULT OnInitDialog( HWND hDlg );
HRESULT ProcessDirectMusicMessages( HWND hDlg );
HRESULT LoadSegmentFile( HWND hDlg, TCHAR* strFileName );
HRESULT OnPlayAudio( HWND hDlg );

//-----------------------------------------------------------------------------
// Defines, constants, and global variables
//-----------------------------------------------------------------------------
#define MUSIC_VOLUME_RANGE      ( 0-(DMUS_VOLUME_MIN/4) )

CMusicManager*     g_pMusicManager          = NULL;
CMusicSegment*     g_pMusicSegment          = NULL;
HINSTANCE          g_hInst                  = NULL;
HANDLE             g_hDMusicMessageEvent    = NULL;
char               g_strCmdLine[256];

//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: Entry point for the application.  Since we use a simple dialog for 
//       user interaction we don't need to pump messages.
//-----------------------------------------------------------------------------
INT APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, 
                      INT nCmdShow )
{
    HWND    hDlg = NULL;
    BOOL    bDone = FALSE;
    int     nExitCode;
    HRESULT hr; 
    DWORD   dwResult;
    MSG     msg;

    g_hInst = hInst;

    strcpy(g_strCmdLine, pCmdLine);

    // Display the main dialog box.
    hDlg = CreateDialog( hInst, MAKEINTRESOURCE(IDD_MAIN), 
                         NULL, MainDlgProc );

    while( !bDone ) 
    { 
        dwResult = MsgWaitForMultipleObjects( 1, &g_hDMusicMessageEvent, 
                                              FALSE, INFINITE, QS_ALLEVENTS );
        switch( dwResult )
        {
            case WAIT_OBJECT_0 + 0:
                // g_hDPMessageEvent is signaled, so there are
                // DirectPlay messages available
                if( FAILED( hr = ProcessDirectMusicMessages( hDlg ) ) ) 
                {
                    DXTRACE_ERR( TEXT("ProcessDirectMusicMessages"), hr );
                    return FALSE;
                }
                break;

            case WAIT_OBJECT_0 + 1:
                // Windows messages are available
                while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) 
                { 
                    if( !IsDialogMessage( hDlg, &msg ) )  
                    {
                        TranslateMessage( &msg ); 
                        DispatchMessage( &msg ); 
                    }

                    if( msg.message == WM_QUIT )
                    {
                        nExitCode = (int)msg.wParam;
                        bDone     = TRUE;
                        DestroyWindow( hDlg );
                    }
                }
                break;
        }
    }

    return nExitCode;
}




//-----------------------------------------------------------------------------
// Name: MainDlgProc()
// Desc: Handles dialog messages
//-----------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{
    HRESULT hr;

    switch( msg ) 
    {
        case WM_INITDIALOG:
            if( FAILED( hr = OnInitDialog( hDlg ) ) )
            {
                DXTRACE_ERR( TEXT("OnInitDialog"), hr );
                MessageBox( hDlg, "Error initializing DirectMusic.  Sample will now exit.", 
                                  "DirectMusic Sample", MB_OK | MB_ICONERROR );
                EndDialog( hDlg, 0 );
                return TRUE;
            }
            break;

        case WM_COMMAND:
            switch( LOWORD(wParam) )
            {
                case IDCANCEL:
                    PostQuitMessage( IDCANCEL );
                    break;

                default:
                    return FALSE; // Didn't handle message
            }
            break;

        case WM_DESTROY:
            // Cleanup everything
            SAFE_DELETE( g_pMusicSegment );
            SAFE_DELETE( g_pMusicManager );
            CloseHandle( g_hDMusicMessageEvent );
            break; 

        default:
            return FALSE; // Didn't handle message
    }

    return TRUE; // Handled message
}




//-----------------------------------------------------------------------------
// Name: OnInitDialog()
// Desc: Initializes the dialogs (sets up UI controls, etc.)
//-----------------------------------------------------------------------------
HRESULT OnInitDialog( HWND hDlg )
{
    HRESULT hr; 

    // Load the icon
    HICON hIcon = LoadIcon( g_hInst, MAKEINTRESOURCE( IDR_MAINFRAME ) );

    // Set the icon for this dialog.
    SendMessage( hDlg, WM_SETICON, ICON_BIG,   (LPARAM) hIcon );  // Set big icon
    SendMessage( hDlg, WM_SETICON, ICON_SMALL, (LPARAM) hIcon );  // Set small icon

    g_hDMusicMessageEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
    g_pMusicManager = new CMusicManager();

    if( FAILED( hr = g_pMusicManager->Initialize( hDlg ) ) )
        return DXTRACE_ERR( TEXT("Initialize"), hr );

    // Register segment notification
    IDirectMusicPerformance* pPerf = g_pMusicManager->GetPerformance();
    GUID guid = GUID_NOTIFICATION_SEGMENT;
    pPerf->AddNotificationType( guid );
    pPerf->SetNotificationHandle( g_hDMusicMessageEvent, 0 );  

    // Load a default music segment 
    
    TCHAR strFileName[MAX_PATH];

    if (!strlen(g_strCmdLine)) {
      strcpy( strFileName, DXUtil_GetDXSDKMediaPath() );
      strcat( strFileName, "sample.sgt" );
    }
    else strcpy(strFileName, g_strCmdLine);
    
    if( S_FALSE == LoadSegmentFile( hDlg, strFileName ) )
    {
        // Set the UI controls
        SetDlgItemText( hDlg, IDC_FILENAME, TEXT("No file loaded.") );
    }
    OnPlayAudio(hDlg);

    return S_OK;
}


//-----------------------------------------------------------------------------
// Name: LoadSegmentFile()
// Desc: 
//-----------------------------------------------------------------------------
HRESULT LoadSegmentFile( HWND hDlg, TCHAR* strFileName )
{
    HRESULT hr;

    SetDlgItemText( hDlg, IDC_FILENAME, TEXT("") );

    // Free any previous segment, and make a new one
    SAFE_DELETE( g_pMusicSegment );

    // Have the loader collect any garbage now that the old 
    // segment has been released
    g_pMusicManager->CollectGarbage();

    // Set the media path based on the file name (something like C:\MEDIA)
    // to be used as the search directory for finding DirectMusic content
    // related to this file.
    TCHAR strMediaPath[MAX_PATH];
    _tcscpy( strMediaPath, strFileName );
    TCHAR* strLastSlash = _tcsrchr(strMediaPath, TEXT('\\'));
    *strLastSlash = 0;
    if( FAILED( hr = g_pMusicManager->SetSearchDirectory( strMediaPath ) ) )
        return DXTRACE_ERR( TEXT("SetSearchDirectory"), hr );

    // For DirectMusic must know if the file is a standard MIDI file or not
    // in order to load the correct instruments.
    BOOL bMidiFile = FALSE;
    if( strstr( strFileName, ".mid" ) != NULL ||
        strstr( strFileName, ".rmi" ) != NULL ) 
    {
        bMidiFile = TRUE;
    }

    // Load the file into a DirectMusic segment 
    if( FAILED( g_pMusicManager->CreateSegmentFromFile( &g_pMusicSegment, strFileName, 
                                                        TRUE, bMidiFile ) ) )
    {
        // Not a critical failure, so just update the status
        return S_FALSE; 
    }

    // Update the UI controls to show the segment is loaded
    SetDlgItemText( hDlg, IDC_FILENAME, strFileName );
    
    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: ProcessDirectMusicMessages()
// Desc: Handle DirectMusic notification messages
//-----------------------------------------------------------------------------
HRESULT ProcessDirectMusicMessages( HWND hDlg )
{
    HRESULT hr;
    IDirectMusicPerformance8* pPerf = NULL;
    DMUS_NOTIFICATION_PMSG* pPMsg;
        
    if( NULL == g_pMusicManager )
        return S_OK;

    pPerf = g_pMusicManager->GetPerformance();

    // Get waiting notification message from the performance
    while( S_OK == pPerf->GetNotificationPMsg( &pPMsg ) )
    {
        switch( pPMsg->dwNotificationOption )
        {
        case DMUS_NOTIFICATION_SEGEND:
            if( pPMsg->punkUser )
            {
                IDirectMusicSegmentState8* pSegmentState   = NULL;
                IDirectMusicSegment*       pNotifySegment   = NULL;
                IDirectMusicSegment8*      pNotifySegment8  = NULL;
                IDirectMusicSegment8*      pPrimarySegment8 = NULL;

                // The pPMsg->punkUser contains a IDirectMusicSegmentState8, 
                // which we can query for the segment that the SegmentState refers to.
                if( FAILED( hr = pPMsg->punkUser->QueryInterface( IID_IDirectMusicSegmentState8,
                                                                  (VOID**) &pSegmentState ) ) )
                    return DXTRACE_ERR( TEXT("QueryInterface"), hr );

                if( FAILED( hr = pSegmentState->GetSegment( &pNotifySegment ) ) )
                {
                    // Sometimes the segend arrives after the segment is gone
                    // This can happen when you load another segment as 
                    // a motif or the segment is ending
                    if( hr == DMUS_E_NOT_FOUND )
                    {
                        SAFE_RELEASE( pSegmentState );
                        return S_OK;
                    }

                    return DXTRACE_ERR( TEXT("GetSegment"), hr );
                }

                if( FAILED( hr = pNotifySegment->QueryInterface( IID_IDirectMusicSegment8,
                                                                 (VOID**) &pNotifySegment8 ) ) )
                    return DXTRACE_ERR( TEXT("QueryInterface"), hr );

                // Get the IDirectMusicSegment for the primary segment
                pPrimarySegment8 = g_pMusicSegment->GetSegment();

                // Cleanup
                SAFE_RELEASE( pSegmentState );
                SAFE_RELEASE( pNotifySegment );
                SAFE_RELEASE( pNotifySegment8 );
            }
            break;
        }

        pPerf->FreePMsg( (DMUS_PMSG*)pPMsg ); 
    }

    return S_OK;
}



//-----------------------------------------------------------------------------
// Name: OnPlayAudio()
// Desc: 
//-----------------------------------------------------------------------------
HRESULT OnPlayAudio( HWND hDlg )
{
    HRESULT hr;

    // Set the segment to repeat many times
    if( FAILED( hr = g_pMusicSegment->SetRepeats( DMUS_SEG_REPEAT_INFINITE ) ) )
        return DXTRACE_ERR( TEXT("SetRepeats"), hr );

    if( FAILED( hr = g_pMusicSegment->Play( 0) ) )
        return DXTRACE_ERR( TEXT("Play"), hr );

    return S_OK;
}





?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色诱视频网站一区| 亚洲成人免费视频| 激情五月婷婷综合| 久久久影视传媒| 国产乱理伦片在线观看夜一区| 欧美一卡二卡在线| 国内成人免费视频| 一区二区视频在线看| 777午夜精品免费视频| 九九视频精品免费| 亚洲中国最大av网站| 欧美一区二区在线免费观看| 国产老女人精品毛片久久| 亚洲乱码国产乱码精品精98午夜| 欧美在线你懂的| 国产成人啪免费观看软件| 亚洲午夜久久久久久久久电影院 | 在线精品国精品国产尤物884a| 99久久综合99久久综合网站| 中文成人综合网| 日韩欧美中文一区二区| 91老司机福利 在线| 国产精品一区二区黑丝| 五月综合激情婷婷六月色窝| 亚洲精品网站在线观看| 欧美军同video69gay| www.日韩在线| 免费在线看成人av| 亚洲动漫第一页| 日韩欧美在线不卡| 婷婷综合五月天| 亚洲va在线va天堂| 日韩和欧美的一区| 亚洲网友自拍偷拍| 亚洲图片欧美色图| 国产亚洲综合av| 国产日本亚洲高清| 中文字幕亚洲精品在线观看| 亚洲视频每日更新| 有码一区二区三区| 日本欧美久久久久免费播放网| 日韩成人av影视| 欧美影视一区在线| 亚洲精品你懂的| 亚洲午夜精品网| 五月激情综合婷婷| 精品一区二区三区免费播放| 国产aⅴ综合色| 欧美综合在线视频| 欧美变态凌虐bdsm| 国产精品久久久久久妇女6080| 亚洲精品视频一区| 人人精品人人爱| 99re这里都是精品| www激情久久| 亚洲成人7777| 国产成人一区在线| 欧美日韩免费一区二区三区 | 精品美女一区二区| 日本一区二区三区视频视频| 午夜视频一区在线观看| 日韩av二区在线播放| 9人人澡人人爽人人精品| 欧美一卡二卡三卡| 一区二区三区四区五区视频在线观看 | 99视频国产精品| 欧美成人在线直播| 日韩1区2区日韩1区2区| 欧洲精品在线观看| 综合久久一区二区三区| 免费一区二区视频| 欧美一区二区在线免费观看| 亚洲一区精品在线| 欧美性受xxxx| 亚洲成人先锋电影| 欧美男女性生活在线直播观看| 亚洲最大成人综合| 欧美日韩黄色一区二区| 欧美sm极限捆绑bd| 日本vs亚洲vs韩国一区三区二区| 欧美日韩三级一区| 日本三级亚洲精品| 久久综合成人精品亚洲另类欧美| 亚洲一区免费观看| 欧美一区二区在线播放| 久久er精品视频| 日韩一区欧美小说| 欧美亚洲一区二区在线| 日本中文字幕一区二区视频 | 天堂蜜桃一区二区三区| 久久精品视频一区二区| 成人深夜福利app| 亚洲成av人片在www色猫咪| 7777精品久久久大香线蕉| 国产精品一区二区在线看| 国产精品久久久久aaaa| 欧美色网站导航| 国产尤物一区二区在线| 一区二区三区四区中文字幕| 日韩美一区二区三区| 精品视频一区二区不卡| 国产专区综合网| 久久av老司机精品网站导航| 婷婷久久综合九色综合绿巨人| 亚洲在线视频网站| 一区二区三区丝袜| 一区二区三区四区五区视频在线观看 | 国产精品亚洲一区二区三区妖精| 91婷婷韩国欧美一区二区| 蜜桃一区二区三区在线| 懂色av中文字幕一区二区三区| 欧美日韩一区不卡| 国产婷婷色一区二区三区四区| 欧美精品 国产精品| 欧美精品久久久久久久多人混战| 欧美亚日韩国产aⅴ精品中极品| 91网站在线播放| 欧美天堂亚洲电影院在线播放| 在线精品视频一区二区三四| 欧美亚洲高清一区二区三区不卡| 久久不见久久见免费视频1| 国产成人啪免费观看软件| www.性欧美| 国产亚洲一二三区| 欧美高清在线视频| 日韩精品福利网| 成人黄色在线网站| 久久久久久久电影| 亚洲一级不卡视频| 丁香六月综合激情| 精品久久国产字幕高潮| 亚洲国产视频一区| 91丨九色丨国产丨porny| 欧美一级久久久久久久大片| 国产精品美女www爽爽爽| 久久国产尿小便嘘嘘尿| 欧美日韩一区二区在线观看视频| 一区二区中文视频| 高清在线观看日韩| 久久久久久电影| 一区视频在线播放| 在线亚洲+欧美+日本专区| 亚洲一区二区在线免费看| 67194成人在线观看| 国内精品久久久久影院薰衣草 | 色婷婷久久99综合精品jk白丝| 精品久久久久一区| 激情国产一区二区| 精品国产1区二区| 国产一区欧美二区| 国产日韩欧美制服另类| 丁香婷婷综合五月| 国产精品护士白丝一区av| 成人综合在线观看| 一区二区激情视频| 欧美精品tushy高清| 久久99国产精品尤物| 国产日韩欧美电影| 欧美这里有精品| 久久国产婷婷国产香蕉| 国产精品久久久久精k8| 欧美日免费三级在线| 国模一区二区三区白浆| 国产精品女同一区二区三区| 91伊人久久大香线蕉| 婷婷亚洲久悠悠色悠在线播放| 日韩一区二区三区四区五区六区| 狠狠色丁香久久婷婷综合丁香| 亚洲国产精品成人综合| 欧美日韩一级二级三级| 丰满放荡岳乱妇91ww| 午夜伦欧美伦电影理论片| 国产天堂亚洲国产碰碰| 制服丝袜成人动漫| 91搞黄在线观看| 粉嫩一区二区三区在线看| 奇米色一区二区| 一区二区三区视频在线观看| 国产无一区二区| 欧美成人艳星乳罩| 在线成人免费观看| 在线免费av一区| 91丨porny丨首页| 丁香一区二区三区| 国产成人午夜99999| 国产在线看一区| 精品一区二区免费在线观看| 日韩 欧美一区二区三区| 又紧又大又爽精品一区二区| 亚洲日本在线天堂| 国产精品夫妻自拍| 综合久久综合久久| 亚洲女人****多毛耸耸8| 亚洲另类春色国产| 亚洲国产视频一区二区| 日韩一区精品视频| 狠狠色丁香久久婷婷综合丁香| 国产精品自拍av| 99re66热这里只有精品3直播| av激情成人网|