WindowsXP + VC++6.0(MFC使用)環境でプログラムしています。
mciSendString関数を利用するためのテストプログラムをダイアログベースで作成しています。
その過程で、MM_MCINOTIFYに対応するメッセージハンドラを追加するため、「ワークスペース内でダイアログクラスを右クリック→Windowsメッセージハンドラの追加」や「ClassWizard表示→メッセージマップタグ」の方法で追加しようとしました。
しかし、どちらの場合もメッセージ欄にMM_MCINOTIFYメッセージが表示されずメッセージハンドラを作成することが出来ません。
この場合の対処方法についてアドバイスいただけないでしょうか。
よろしくお願いいたします。
検索したら山ほどヒットしますが・・・
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に飛び込んできますので!
以上。参考まで
オショウさん、Resをありがとうございます。
MM_MCINOTIFYメッセージはWndProc内でしか取得できないということでしょうか。
ということは、新規作成時にプロジェクトタブ内で「MFC AppWizard (exe)」を
選択して作成するようなプログラム内では、メッセージハンドラを作成して
MM_MCINOTIFYを利用することは不可能なのでしょうか。
MESSAGE_MAPに手動で追加するか・・・
もしくは、WndProcをオーバーライドするか・・・
ダイアログベースなので後者かと。
http://www.codeguru.com/forum/showthread.php?t=397650
これ参考になりません?
以上。
オショウさん、ご紹介いただいたサイトを参考にして目的を達成できまし
た、まったくの初心者のため、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);
}
ツイート | ![]() |