CWnd と MCIWnd… の HWND – プログラミング – Home

通知
すべてクリア

[解決済] CWnd と MCIWnd... の HWND


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

動画,音声(avi,mpeg,waveなど)を再生するものを作ってます。
その方法として、MCIWnd... でウィンドウを作って再生してます。
MCIWndCreate で作成されたウィンドウについて質問です。

MFC の CWnd クラスを派生させて、CMediaWnd クラスを作成したのですが、
ClassWizard によって追加したメッセージによる処理
(マウスクリックや、ウィンドウ位置,サイズ変更など)
をうまくやってくれません。
MCIWndCreate で取ったウィンドウハンドルを
CWnd へ置きかえる方法が悪いのでは?と思ってるのですが...。
作成した CMediaWnd クラスのコードの一部を下に記します。

//hParent - 親ウィンドウ, dwStyle - ウィンドウスタイル
BOOL CMediaWnd::Create(HWND hParent, DWORD dwStyle)
{
//Attach を使うのが悪いのでしょうか?
return Attach
(::MCIWndCreate(hParentWnd,NULL, dwStyle, null));
}

HWND CMediaWnd::DestroyWindow()
{
//Attach が悪ければ、やっぱりココも悪いですよね...。
MCIWndDestroy(m_hWnd);
return Detach();
}

void CMediaWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
//ここなどが呼ばれないみたいなんです...。
CWnd::OnLButtonDown(nFlags, point);
}

というような感じです。
他にもメディアファイルのオープンや、再生、停止などの関数も用意しました。
このような MCIWnd...系を使った関数は正しく動きます。
メッセージによる処理だけが駄目なんです。
それと、ウィンドウ終了時にエラーが出るんです。
DestroyWindow で自分で破棄した場合には正常に終了するんですが、
ウィンドウの右上にある×印をクリックすると、アサートするんです。
OnClose で DestroyWindow を呼ぼうにも OnClose 自体が呼ばれないんですし...。
(ウィンドウプロシージャに関係があるのでは?などとも考えてみましたけど、
クラス内でどう実装したらいいかも解らなくて、結局どうしようもなくなってしまいまし
た・・・。)

解る方、いたらどうかお願いします。

環境
WindowsMe
VisualC++6.0 StandardEdition
MFC 使用


引用未解決
トピックタグ
あき
 あき
(@あき)
ゲスト
結合: 25年前
投稿: 47
Topic starter  

すみません、訂正です。
コードの MCIWndCreate の引数が間違えてました。

//hParent - 親ウィンドウ, dwStyle - ウィンドウスタイル
BOOL CMediaWnd::Create(HWND hParent, DWORD dwStyle)
{
//Attach を使うのが悪いのでしょうか?
return Attach
(::MCIWndCreate(hParent,NULL, dwStyle, null));
}


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

Attachしてもメッセージハンドラは置き換えられません。
SubClassWindowを使えばできると思います。


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

早速 SubClassWindow でやってみたところ、成功しました。
何日も頑張ってたことなんで、もうかなり嬉しいです。
(こんなことで嬉しがってるなんて、やっぱり初心者ですかね?)
dairygoodsさん、本当にどうもありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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