ソフトウェア開発 Win32プログラミング

AVI動画を再生する(音声なし)

戻る


ちょっとしたアニメーションを表示したい場合は、 クラス名が"SysAnimate32"のアニメーション コントロールとAVI動画を使うといい。

アニメーション コントロールは、AVI動画を再生できる。 AVI動画は、RLE圧縮されていてもよい。 またAVI動画は、リソースに埋め込むこともできる。

アニメーション コントロールは、コモンコントロールなので、 作成前にInitCommonControls()を呼ぶ必要がある。 アニメーション コントロールが再生できるのは、音声がないAVIだけである。

アニメーション コントロールを操作するには、<commctrl.h>を#includeして、Animate_で始まるマクロを使うとよい。 リソースに埋め込まれたAVI動画をダイアログで再生する方法を以下に示す。

#include <windows.h>
#include <commctrl.h>
#include <dlgs.h>

INT g_nRepeat = -1;
 
BOOL CALLBACK
DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_INITDIALOG:
        Animate_Open(GetDlgItem(hDlg, ctl1), MAKEINTRESOURCE(1));
        EnableWindow(GetDlgItem(hDlg, psh1), TRUE);
        EnableWindow(GetDlgItem(hDlg, psh2), FALSE);
        break;
 
    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case IDCANCEL:
            Animate_Close(GetDlgItem(hDlg, ctl1));
            EndDialog(hDlg, IDCANCEL);
            break;
 
        case psh1:  // 再生
            EnableWindow(GetDlgItem(hDlg, psh1), FALSE);
            EnableWindow(GetDlgItem(hDlg, psh2), TRUE);
            Animate_Play(GetDlgItem(hDlg, ctl1), 0, -1, g_nRepeat);
            break;
 
        case psh2:  // 停止
            EnableWindow(GetDlgItem(hDlg, psh1), TRUE);
            EnableWindow(GetDlgItem(hDlg, psh2), FALSE);
            Animate_Stop(GetDlgItem(hDlg, ctl1));
            break;
        }
    }
    return FALSE;
}
 
INT WINAPI WinMain(
    HINSTANCE   hInstance,
    HINSTANCE   hPrevInstance,
    LPSTR       pszCmdLine,
    INT         nCmdShow)
{
    InitCommonControls();
    DialogBox(hInstance, MAKEINTRESOURCE(1), NULL, DialogProc);
    return 0;
}
リソースは次のようになっている。
#include <windows.h>
#include <dlgs.h>

LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
 
1 AVI "copying.avi"
 
1 DIALOG 0, 0, 210, 65
STYLE WS_CAPTION | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | DS_CENTER
CAPTION "Animation"
FONT 10, "MS Pゴシック"
{
    CONTROL "", ctl1, "SysAnimate32", ACS_CENTER | ACS_TRANSPARENT | WS_CHILD | WS_VISIBLE, 3, 3, 198, 34
    PUSHBUTTON "再生(&P)", psh1, 5, 45, 60, 14
    PUSHBUTTON "停止(&S)", psh2, 70, 45, 60, 14
}

ACS_CENTERスタイルを指定すると、表示される動画が中央ぞろえになる。ACS_TRANSPARENTスタイルを指定すると、一番左上のピクセルを透過色として透過処理が行われる。

ソース: animate2.zip


戻る

©片山博文MZ
katayama.hirofumi.mz@gmail.com

inserted by FC2 system