- ベストアンサー
VC++.netでaviを制御するには
- VC++.netで、aviをコントロールするプログラムを製作しています。フォーム上に、スイッチを6個作り、スイッチをクリックすると、aviがフル画面で動き、aviが終了すると、フル画面が消え、スイッチがあるフォームの絵に戻るというプログラムを作りたいのですが、上手くできません。
- フォーム上にスイッチを配置し、axWindowsMediaPlayerを適当に6個配置し、各スイッチのイベントでaxWindowsMediaPlayerを操作していますが、2回目以降はフルスクリーンになりません。また、フルスクリーンになる方法と終了のパラメータをどう設定すれば良いかわかりません。
- 現在、ExpressEditionを使用していますが、VC++.netでaviを制御する方法についてのアドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>> if (this->axWindowsMediaPlayer1->playState == playState = 8){ 左辺のthis->axWindowsMediaPlayer1->playStateと、右辺の8の間にあるplayStateがどこにも定義されていないからエラーになってるだけだと思います。 それはさておき、変化した新しいplayStateの値はe->newStateで取り出せるので、playStateプロパティを直接読む必要は無いと思います。 if (e->newState == 8) { で良いような気がします。
その他の回答 (1)
- magicalpass
- ベストアンサー率58% (378/648)
普通にWindowsMediaクラスを使えば良さそうなのに、何でこんな技術情報の少ないものを使ってるのか……というのはさておき、 AxWindowsMediaPlayerの再生状態はplayStateプロパティに入ってるので、ここの値が再生中から停止に変わるのを自分で監視するか、 あるいはPlayStateChangeのイベント発生で再生中から停止に変わったのを見てaviの終了を判断することになると思います。 使い方は自分で調べてください。(MSDNライブラリもドキュメントが英語だし、playStateプロパティに具体的にどういう値が入ってるのかも書いてないから難しそうですが。PlayStateChangeイベントの方のサンプルコードに書いてある値がそうかとは思いますけど) (EndOfStreamイベントの方がぴったりかなとか思ったら、将来のためのリザーブとか書いてやがる)
お礼
どうも回答ありがとうございます 大変参考になりました ご指摘の通りやってみたのですが ビルドすると error C2065: 'playState' : 定義されていない識別子です。 とエラーが出てしまいました private: System::Void axWindowsMediaPlayer1_PlayStateChange(System::Object^ sender, AxWMPLib::_WMPOCXEvents_PlayStateChangeEvent^ e) { if (this->axWindowsMediaPlayer1->playState == playState = 8){ axWindowsMediaPlayer1->close(); axWindowsMediaPlayer1->Visible = false; return; } このif文の行なのですが、具体的にどうなおせば良いのでしょうか もしよければご指摘ください よろしくお願いします
お礼
ありがとうございます。 解決しました。 あと少し気になったのですが 切り替わる時に、少しブラックアウトするのは、PCの処理速度の問題? これは仕方ないですよね。 丁寧に答えていただいて 本当にありがとうございました。