全てのペインが表示されたら処理を開始するには – プログラミング – Home

全てのペインが表示されたら処理を開始す...
 
通知
すべてクリア

[解決済] 全てのペインが表示されたら処理を開始するには


あき
 あき
(@あき)
ゲスト
結合: 24年前
投稿: 47
Topic starter  

こんばんは。

Windows 2000/Visual C++ 6.0で、MFCを使用して、SDI/スプリッターウィンドウのアプリケ
ーションを作成しています。ソフト自体は、DirectShowを使用するMovie Playerのようなもの
です。スプリッターウィンドウ内のある1つのビューが動画再生ウィンドウになっています。

コマンドラインでファイルパスを指定して、起動時に再生を開始したいのですが、全てのスプリ
ッターウィンドウ内のビューが表示された後にレンダリングを開始して再生したいのです。
現在は、スプリッターウィンドウ内の1つ、再生ビューのOnInitialUpdateでコマンドライン引
数を解析してそこでMovieの再生を開始しているのですが、ウィンドウがまだ目に見えない状態
でレンダリングを開始してしまい、ウィンドウが実際に目に見える状態になったときには既にあ
るていどまでMovieを再生したところになってしまいます。

対策としては、スプリッターウィンドウ内のの全てのCView(派生)クラスのOnInitialUpdate
()から、ユーザメッセージをPostMessage()で飛ばして、全部からのメッセージを(フレーム)
ウィンドウが受け取ったらレンダリングを開始すれば(フレームウィンドウがこれらのユーザ定
義メッセージを受け取るのに多少遅延があるでしょうから)いけるかな?ということくらいしか
思いつかないのですが、もう少しスマートな方法はないものかと試行錯誤中です。

このように、ウィンドウが実際に目に見えるようになってから処理を開始したい場合、どのよう
な処理を行えばよいか、お知恵を拝借できると幸いです。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

CWinApp::OnIdle() をオーバーライドして、
初回の呼び出しで処理すれば出来ると思います。


返信引用
あき
 あき
(@あき)
ゲスト
結合: 24年前
投稿: 47
Topic starter  

dairygoodさん

無事CWinApp::OnIdle()で期待通りの動作をするようになりました。

なるほど、ごもっともですね。
常套手段なのでしょうか。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました