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
作成すると、自動的に破棄されます。 関数を CAnimateCtrl
使用してヒープ上にオブジェクトを作成する new
場合は、オブジェクトを呼び出 delete
して破棄する必要があります。 新しいクラスを派生させ、そのクラス CAnimateCtrl
内のメモリを割り当てる場合は、デストラクターを CAnimateCtrl
オーバーライドして割り当てを破棄します。
使用CAnimateCtrl
の詳細については、「コントロールと CAnimateCtrl の使用」を参照してください。
継承階層
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 の CreateWindowEx の dwExStyle パラメーターを参照してください。
dwStyle
アニメーション コントロールのスタイルを指定します。 Windows SDK のアニメーション コントロール スタイルで 説明されているウィンドウ コントロール スタイルとアニメーション コントロール スタイル の任意の組み合わせを適用します。
rect
pParentWnd のクライアント座標における、作成するウィンドウのサイズと位置を記述する RECT 構造体への参照。
pParentWnd
コントロールの親であるウィンドウへのポインター。
nID
コントロールの子ウィンドウ ID。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
Windows 拡張スタイルの前置WS_EX_で指定された拡張 Windows スタイルを適用するには、[作成] の代わりに使用CreateEx
します。
CAnimateCtrl::IsPlaying
オーディオ ビデオ インターリーブ (AVI) クリップが再生されているかどうかを示します。
BOOL IsPlaying() const;
戻り値
AVI クリップが再生されている場合は TRUE。それ以外の場合は FAL Standard Edition。
解説
このメソッドは、 Windows SDK で説明されているACM_ISPLAYING メッセージを送信します。
CAnimateCtrl::Open
この関数を呼び出して AVI クリップを開き、最初のフレームを表示します。
BOOL Open(LPCTSTR lpszFileName);
BOOL Open(UINT nID);
パラメーター
lpszFileName
CString
AVI ファイルの名前または AVI リソースの名前を含む null で終わる文字列へのオブジェクトまたはポインター。 このパラメーターが 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 の例を参照してください。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示