CAnimateCtrl クラス

Windows コモン アニメーション コントロールの機能が用意されています。

構文

class CAnimateCtrl : public CWnd

メンバー

パブリック コンストラクター

名前 説明
CAnimateCtrl::CAnimateCtrl CAnimateCtrl オブジェクトを構築します。

パブリック メソッド

名前 説明
CAnimateCtrl::Close AVI クリップを閉じます。
CAnimateCtrl::Create アニメーション コントロールを作成し、 CAnimateCtrl オブジェクトにアタッチします。
CAnimateCtrl::CreateEx 指定した Windows 拡張スタイルを使用してアニメーション コントロールを作成し、 CAnimateCtrl オブジェクトにアタッチします。
CAnimateCtrl::IsPlaying オーディオ ビデオ インターリーブ (AVI) クリップが再生されているかどうかを示します。
CAnimateCtrl::Open ファイルまたはリソースから AVI クリップを開き、最初のフレームを表示します。
CAnimateCtrl::P lay 音なしでAVIクリップを再生します。
CAnimateCtrl::Seek AVI クリップの選択した単一フレームを表示します。
CAnimateCtrl::Stop AVI クリップの再生を停止します。

解説

このコントロール (したがって、 CAnimateCtrl クラス) は、Windows 95、Windows 98、および Windows NT バージョン 3.51 以降で実行されているプログラムでのみ使用できます。

アニメーション コントロールは、AVI (Audio Video Interleaved) 形式 (標準の Windows ビデオ/オーディオ形式) でクリップを表示する四角形のウィンドウです。 AVI クリップは、ムービーのような一連のビットマップ フレームです。

アニメーション コントロールは、単純な AVI クリップのみを再生できます。 具体的には、アニメーション コントロールによって再生されるクリップは、次の要件を満たしている必要があります。

  • ビデオ ストリームは 1 つだけ必要であり、少なくとも 1 つのフレームが必要です。

  • ファイルには最大で 2 つのストリームを含めることができます (通常、もう一方のストリームが存在する場合はオーディオ ストリームですが、アニメーション コントロールはオーディオ情報を無視します)。

  • クリップは、圧縮されていないか、RLE8 圧縮で圧縮する必要があります。

  • ビデオ ストリームではパレットの変更は許可されません。

AVI クリップを AVI リソースとしてアプリケーションに追加することも、別の AVI ファイルとしてアプリケーションに添付することもできます。

AVI クリップが表示されている間もスレッドの実行が継続されるため、アニメーション コントロールの一般的な用途の 1 つは、長時間の操作中にシステム アクティビティを示す方法です。 たとえば、エクスプローラーの [検索] ダイアログ ボックスには、システムがファイルを検索する際に、動く虫眼鏡が表示されます。

ダイアログ ボックス内またはダイアログ エディターを使用してダイアログ リソースから CAnimateCtrl オブジェクトを作成すると、ユーザーがダイアログ ボックスを閉じると自動的に破棄されます。

ウィンドウ内に CAnimateCtrl オブジェクトを作成する場合は、オブジェクトの破棄が必要になる場合があります。 スタック上に CAnimateCtrl オブジェクトを作成すると、自動的に破棄されます。 new関数を使用してヒープ上にCAnimateCtrl オブジェクトを作成する場合は、オブジェクトのdeleteを呼び出して破棄する必要があります。 CAnimateCtrlから新しいクラスを派生させ、そのクラス内のメモリを割り当てる場合は、CAnimateCtrlデストラクターをオーバーライドして割り当てを破棄します。

CAnimateCtrlの使用方法の詳細については、「Controlsおよび CAnimateCtrl の使用を参照してください。

継承階層

CObject

CCmdTarget

CWnd

CAnimateCtrl

要件

ヘッダー: afxcmn.h

CAnimateCtrl::CAnimateCtrl

CAnimateCtrl オブジェクトを構築します。

CAnimateCtrl();

解説

作成したオブジェクトに対して他の操作を実行するには、 Create メンバー関数を呼び出す必要があります。

// This example creates a secondary thread that implements
// the methods of CAnimateCtrl. The procedure of the thread
// is MyClipThreadProc and the thread was created with the
// code AfxBeginThread( MyClipThreadProc, (LPVOID) pParentWnd).
// The example code creates and initializes an animation control,
// then proceeds to pump messages from the queue until one the
// private messages WM_STOPCLIP, WM_PLAYCLIP, WM_SHOWFIRSTFRAME or
// WM_SHOWLASTFRAME is received. The appropriate action is done for
// these messages. The thread ends when the WM_STOPCLIP is received.
// NOTE: the thread parameter, pParam, is a pointer to a CWnd object
// that will be the parent of the animation control.

#define WM_STOPCLIP WM_USER + 1
#define WM_PLAYCLIP WM_USER + 2
#define WM_SHOWFIRSTFRAME WM_USER + 3
#define WM_SHOWLASTFRAME WM_USER + 4

UINT MyClipThreadProc(LPVOID pParam)
{
   // NOTE: pParentWnd is the parent window of the animation control.
   CWnd *pParentWnd = (CWnd *)pParam;
   CAnimateCtrl cAnimCtrl;

   // Create the animation control.
   if (!cAnimCtrl.Create(WS_CHILD | WS_VISIBLE | ACS_CENTER,
                         CRect(10, 10, 100, 100), pParentWnd, 1))
   {
      return false;
   }

   // Open the AVI file.
   if (!cAnimCtrl.Open(_T("MyAvi.avi")))
   {
      return false;
   }

   // Pump message from the queue until the stop play message is received.
   MSG msg;
   while (GetMessage(&msg, NULL, 0, 0) && (msg.message != WM_STOPCLIP))
   {
      switch (msg.message)
      {
         // Start playing from the first frame to the last,
         // continuously repeating.
      case WM_PLAYCLIP:
         if (!cAnimCtrl.Play(0, (UINT)-1, (UINT)-1))
            return false;
         break;

         // Show the first frame.
      case WM_SHOWFIRSTFRAME:
         if (!cAnimCtrl.Seek(0))
            return false;
         cAnimCtrl.RedrawWindow();
         break;

         // Show the last frame.
      case WM_SHOWLASTFRAME:
         if (!cAnimCtrl.Seek((UINT)-1))
            return false;
         cAnimCtrl.RedrawWindow();
         break;
      }

      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }

   cAnimCtrl.Stop();
   cAnimCtrl.Close();

   return true;
}

CAnimateCtrl::Close

アニメーション コントロールで以前に開いていた AVI クリップ (ある場合) を閉じ、メモリから削除します。

BOOL Close();

戻り値

成功した場合は 0 以外を返します。それ以外の場合は 0 を返します。

CAnimateCtrl::CAnimateCtrl の例を参照してください。

CAnimateCtrl::Create

アニメーション コントロールを作成し、 CAnimateCtrl オブジェクトにアタッチします。

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

パラメーター

dwStyle
アニメーション コントロールのスタイルを指定します。 以下の「解説」セクションで説明するウィンドウ スタイルと、Windows SDK の「 アニメーション コントロール スタイル で説明されているアニメーション コントロール スタイルの任意の組み合わせを適用します。

rect
アニメーション コントロールの位置とサイズを指定します。 CRect オブジェクトまたは RECT 構造体のいずれかを指定できます。

pParentWnd
アニメーション コントロールの親ウィンドウ (通常は CDialog) を指定します。 NULL は指定できません。

nID
アニメーション コントロールの ID を指定します。

戻り値

成功した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

2 つの手順で CAnimateCtrl を構築します。 まず、コンストラクターを呼び出し、 Createを呼び出します。これにより、アニメーション コントロールが作成され、 CAnimateCtrl オブジェクトにアタッチされます。

アニメーション コントロールに次の ウィンドウ スタイル を適用します。

  • WS_CHILD Always

  • 通常WS_VISIBLE

  • ほとんどWS_DISABLEDしない

アニメーション コントロールで拡張ウィンドウ スタイルを使用する場合は、Createの代わりに CreateEx を呼び出します。

上記のウィンドウ スタイルに加えて、1 つ以上のアニメーション コントロール スタイルをアニメーション コントロールに適用することもできます。 アニメーション コントロール スタイルの詳細については、Windows SDK を参照してください

CAnimateCtrl::CAnimateCtrl の例を参照してください。

CAnimateCtrl::CreateEx

コントロール (子ウィンドウ) を作成し、 CAnimateCtrl オブジェクトに関連付けます。

virtual BOOL CreateEx(
    DWORD dwExStyle,
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

パラメーター

dwExStyle
作成するコントロールの拡張スタイルを指定します。 拡張 Windows スタイルの一覧については、Windows SDK の CreateWindowExdwExStyle パラメーターを参照してください。

dwStyle
アニメーション コントロールのスタイルを指定します。 Windows SDK の「 アニメーション コントロール スタイル で説明されているウィンドウ コントロール スタイルとアニメーション コントロール スタイルの任意の組み合わせを適用します。

rect
作成するウィンドウのサイズと位置を記述する RECT 構造体への参照 ( pParentWnd のクライアント座標)。

pParentWnd
コントロールの親であるウィンドウへのポインター。

nID
コントロールの子ウィンドウ ID。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

Create の代わりにCreateExを使用して、Windows 拡張スタイルの前書きWS_EX_で指定された拡張 Windows スタイルを適用します。

CAnimateCtrl::IsPlaying

オーディオ ビデオ インターリーブ (AVI) クリップが再生されているかどうかを示します。

BOOL IsPlaying() const;

戻り値

AVI クリップが再生されている場合は TRUE。それ以外の場合は FALSE。

解説

このメソッドは、Windows SDK で説明されている ACM_ISPLAYING メッセージを送信します。

CAnimateCtrl::Open

この関数を呼び出して AVI クリップを開き、最初のフレームを表示します。

BOOL Open(LPCTSTR lpszFileName);
BOOL Open(UINT nID);

パラメーター

lpszFileName
AVI ファイルの名前または AVI リソースの名前を含む null で終わる文字列への CString オブジェクトまたはポインター。 このパラメーターが NULL の場合、システムはアニメーション コントロール用に以前に開いていた AVI クリップ (存在する場合) を閉じます。

nID
AVI リソース識別子。 このパラメーターが NULL の場合、システムはアニメーション コントロール用に以前に開いていた AVI クリップ (存在する場合) を閉じます。

戻り値

成功した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

AVI リソースは、アニメーション コントロールを作成したモジュールから読み込まれます。

Open AVIクリップのサウンドをサポートしていません。サイレントAVIクリップのみを開くことができます。

アニメーション コントロールに ACS_AUTOPLAY スタイルがある場合、アニメーション コントロールはクリップを開いた直後に自動的に再生を開始します。 スレッドの実行が続いている間、クリップはバックグラウンドで再生され続けます。 クリップの再生が完了すると、自動的に繰り返されます。

アニメーション コントロールに ACS_CENTER スタイルがある場合、AVI クリップはコントロールの中央に配置され、コントロールのサイズは変更されません。 アニメーション コントロールに ACS_CENTER スタイルがない場合、AVI クリップを開いたときに AVI クリップ内の画像のサイズに変更されます。 コントロールの左上隅の位置は変更されず、コントロールのサイズのみが変更されます。

アニメーション コントロールに ACS_TRANSPARENT スタイルがある場合、アニメーション クリップで指定された背景色ではなく、透明な背景を使用して最初のフレームが描画されます。

CAnimateCtrl::CAnimateCtrl の例を参照してください。

CAnimateCtrl::P lay

アニメーション コントロールで AVI クリップを再生するには、この関数を呼び出します。

BOOL Play(
    UINT nFrom,
    UINT nTo,
    UINT nRep);

パラメーター

nFrom
再生が開始されるフレームの 0 から始まるインデックス。 値は 65,536 未満にする必要があります。 値が 0 の場合は、AVI クリップの最初のフレームから始まります。

nTo
再生が終了するフレームの 0 から始まるインデックス。 値は 65,536 未満にする必要があります。 値 - 1 は、AVI クリップの最後のフレームで終わる値を意味します。

nRep
AVI クリップを再生する回数。 値 - 1 は、ファイルを無期限に再生します。

戻り値

成功した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

アニメーション コントロールは、スレッドの実行中にクリップをバックグラウンドで再生します。 アニメーション コントロールに ACS_TRANSPARENT スタイルがある場合、AVI クリップは、アニメーション クリップで指定された背景色ではなく、透明な背景を使用して再生されます。

CAnimateCtrl::CAnimateCtrl の例を参照してください。

CAnimateCtrl::Seek

AVI クリップの 1 つのフレームを静的に表示するには、この関数を呼び出します。

BOOL Seek(UINT nTo);

パラメーター

nTo
表示するフレームの 0 から始まるインデックス。 値は 65,536 未満にする必要があります。 値が 0 の場合は、AVI クリップの最初のフレームが表示されます。 値 -1 は、AVI クリップの最後のフレームを表示します。

戻り値

成功した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

アニメーション コントロールに ACS_TRANSPARENT スタイルがある場合、AVI クリップは、アニメーション クリップで指定された背景色ではなく、透明な背景を使用して描画されます。

CAnimateCtrl::CAnimateCtrl の例を参照してください。

CAnimateCtrl::Stop

アニメーション コントロールで AVI クリップの再生を停止するには、この関数を呼び出します。

BOOL Stop();

戻り値

成功した場合は 0 以外を返します。それ以外の場合は 0 を返します。

CAnimateCtrl::CAnimateCtrl の例を参照してください。

関連項目

CWnd クラス
階層図
CAnimateCtrl::Create
ON_CONTROL