こんばんは。
Windows 2000/Visual C++ 6.0で、MFCを使用して、SDI/スプリッターウィンドウのアプリケ
ーションを作成しています。ソフト自体は、DirectShowを使用するMovie Playerのようなもの
です。スプリッターウィンドウ内のある1つのビューが動画再生ウィンドウになっています。
コマンドラインでファイルパスを指定して、起動時に再生を開始したいのですが、全てのスプリ
ッターウィンドウ内のビューが表示された後にレンダリングを開始して再生したいのです。
現在は、スプリッターウィンドウ内の1つ、再生ビューのOnInitialUpdateでコマンドライン引
数を解析してそこでMovieの再生を開始しているのですが、ウィンドウがまだ目に見えない状態
でレンダリングを開始してしまい、ウィンドウが実際に目に見える状態になったときには既にあ
るていどまでMovieを再生したところになってしまいます。
対策としては、スプリッターウィンドウ内のの全てのCView(派生)クラスのOnInitialUpdate
()から、ユーザメッセージをPostMessage()で飛ばして、全部からのメッセージを(フレーム)
ウィンドウが受け取ったらレンダリングを開始すれば(フレームウィンドウがこれらのユーザ定
義メッセージを受け取るのに多少遅延があるでしょうから)いけるかな?ということくらいしか
思いつかないのですが、もう少しスマートな方法はないものかと試行錯誤中です。
このように、ウィンドウが実際に目に見えるようになってから処理を開始したい場合、どのよう
な処理を行えばよいか、お知恵を拝借できると幸いです。
CWinApp::OnIdle() をオーバーライドして、
初回の呼び出しで処理すれば出来ると思います。
dairygoodさん
無事CWinApp::OnIdle()で期待通りの動作をするようになりました。
なるほど、ごもっともですね。
常套手段なのでしょうか。
ありがとうございました。