MM_MCINOTIFYに対応するメッセージハンドラを追加するには?

解決


田中  2009-07-09 05:41:23  No: 70526

WindowsXP  + VC++6.0(MFC使用)環境でプログラムしています。

mciSendString関数を利用するためのテストプログラムをダイアログベースで作成しています。
その過程で、MM_MCINOTIFYに対応するメッセージハンドラを追加するため、「ワークスペース内でダイアログクラスを右クリック→Windowsメッセージハンドラの追加」や「ClassWizard表示→メッセージマップタグ」の方法で追加しようとしました。
しかし、どちらの場合もメッセージ欄にMM_MCINOTIFYメッセージが表示されずメッセージハンドラを作成することが出来ません。
この場合の対処方法についてアドバイスいただけないでしょうか。
よろしくお願いいたします。


オショウ  2009-07-09 05:45:26  No: 70527

検索したら山ほどヒットしますが・・・

http://yokohama.cool.ne.jp/chokuto/urawaza/message/MM_MCINOTIFY.html
http://www13.plala.or.jp/kymats/study/MULTIMEDIA/mciCommand_callback.html
http://www.geocities.jp/ky_webid/win32c/045.html

サンプルコードを見てもらうと解るように・・・
WndProcに飛び込んできますので!

以上。参考まで


田中  2009-07-09 07:04:00  No: 70528

オショウさん、Resをありがとうございます。

MM_MCINOTIFYメッセージはWndProc内でしか取得できないということでしょうか。
ということは、新規作成時にプロジェクトタブ内で「MFC AppWizard (exe)」を
選択して作成するようなプログラム内では、メッセージハンドラを作成して
MM_MCINOTIFYを利用することは不可能なのでしょうか。


オショウ  2009-07-09 08:03:31  No: 70529

MESSAGE_MAPに手動で追加するか・・・
もしくは、WndProcをオーバーライドするか・・・
ダイアログベースなので後者かと。

http://www.codeguru.com/forum/showthread.php?t=397650

これ参考になりません?

以上。


田中  2009-07-10 20:57:52  No: 70530

オショウさん、ご紹介いただいたサイトを参考にして目的を達成できまし
た、まったくの初心者のため、CWndクラスにそのものズバリのWindowProc関
数があるということも知りませんでした。本当にありがとうございました。
MESSAGE_MAPに手動で追加する方法は今のところ成功できていませんが、更に
自分なりに研究してみようと思います。

私と同じような初心者の方用に私が行ったことをメモしておきます。どなた
かのご参考になれば幸いです。

CWndクラスのメンバ関数であるWindowProcをオーバーライドする。
つまり、メッセージを受け取るクラス(CWnd及びその派生クラス)に次のメン
バ関数を追加する。

  virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM  lParam);

例:
MyTestDlg.h内…
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);

MyTestDlg.cpp内…
LRESULT MyDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    if (message == MM_MCINOTIFY && wParam == MCI_NOTIFY_SUCCESSFUL)
    {
  AfxMessageBox("NOTIFY取得に成功");
    }

    return CDialog::WindowProc(message, wParam, lParam);
}


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加