|
アニメーションコントロールの基本
今回はアニメーションコントロールを作ってみましょう。アニメーションコントロールは、簡単な動画を貼り付けることのできるコントロールです。例えばファイルコピー時や検索時などの、時間のかかる処理を実行しているときに出てくる動く絵を想像してもらえればいいと思います。なお、音声は再生できません。
元になる動画はAVI形式で用意します。複雑な圧縮形式のAVIファイルは使えません。基本的には無圧縮で用意すれば問題ありません。
ところで、AVIファイルはどうやって作ればいいんでしょうか?これは、簡単なAVIファイルであればフリーソフトで作ることができます。ここでは、AVIMakerというソフトを使ってAVIファイルを作ってみます。このソフトは、複数のBMPファイルからAVIファイルを作成できます。
まずは、元になるビットマップファイルを用意します。ここでは、次のような砂時計が回転する動画を作ってみようと思います。

AVIMakerで、作った画像を読み込んでAVI出力します。ビデオの圧縮は「未圧縮」にします。すると簡単にAVI形式のファイルが作成できます。

では、リソースエディタでアニメーションコントロールを追加しましょう。今回はアニメーションコントロールと再生、停止ボタンを追加しました。

次にアニメーションコントロールのプロパティですが、ここではリソースIDを設定し、「Border」をFalseにします。こうすると、動画の周りに枠線が表示されなくなります。
アニメーションコントロールの操作は、CAnimateCtrlクラスの関数を使って行うので、Control型のDDX変数を追加すると操作が楽になります。アニメーションコントロールを右クリックし、「変数の追加」を選択します。

アクセスはprivate、「コントロール変数」をチェックし、カテゴリにControlを選択します。変数のデータ型はCAnimateCtrlにします。

AVIファイルはアプリケーションと別ファイルにしてもいいですが、アプリケーションのリソースとして組み込むこともできます。ここでは、リソースとして組み込んでみます。リソースの追加で、「インポート」を選択し、作成したAVIファイルを選択します。リソースの種類はAVIとしておきます。これでIDR_AVI1というIDのリソースとして組み込まれます。

さらにボタンにBN_CLICKEDのメッセージハンドラを追加します。(ボタンのイベントハンドラの追加方法は、「ボタンの基本」を見てください。)
では、コードのほうを見ていきましょう。OnInitDialog()で、次のように処理します。CAnimateCtrl::Open()関数で、AVIファイルまたはAVIリソースをオープンします。CAnimateCtrl::Play()関数で、再生開始します。
BOOL CAnimateDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
// TODO: 初期化をここに追加します。
{
int err = 0;
// オープン
if (!err) if (!m_xcAnimate.Open(IDR_AVI1)) err = 1;
// 再生
if (!err) if (!m_xcAnimate.Play(0, -1, -1)) err = 1;
}
return TRUE;
}
|
BOOL CAnimateCtrl::Open(LPCTSTR lpszFileName);
BOOL CAnimateCtrl::Open(UINT nID); |
| 説明: |
AVIファイルをオープン |
| 引数: |
lpszFileName:AVIファイル名
nID:AVIリソースID |
| 戻り値: |
正常終了した場合は0以外、それ以外の場合は0 |
| BOOL CAnimateCtrl::Play(UINT nFrom, UINT nTo, UINT nRep); |
| 説明: |
AVIファイルを再生 |
| 引数: |
nFrom:再生を開始するフレーム。0の場合最初から。
nTo:再生を終了するフレーム。-1の場合最後まで。
nRep:ループ再生回数。-1の場合無限。 |
| 戻り値: |
正常終了した場合は0以外、それ以外の場合は0 |
"再生"ボタン、"停止"ボタン押下時のハンドラの内容は次のようにしました。CAnimateCtrl::Stop()関数は再生を停止します。
// "再生"ボタン押下
void CAnimateDlg::OnBnClickedBtnPlay()
{
int err = 0;
if (!err) if (!m_xcAnimate.Play(0, -1, -1)) err = 1;
}
// "停止"ボタン押下
void CAnimateDlg::OnBnClickedBtnStop()
{
int err = 0;
if (!err) if (!m_xcAnimate.Stop()) err = 1;
}
|
| BOOL CAnimateCtrl::Stop( ); |
| 説明: |
AVIファイル再生を停止 |
| 引数: |
なし |
| 戻り値: |
正常終了した場合は0以外、それ以外の場合は0 |
では、ビルドして実行してみましょう。起動すると、アニメーションの再生が開始されます。停止、再生ボタンを押すと、それぞれ停止、再生されます。
|