複数プロセス間で、PostMessage でプロセス間通信ができないでいます。
・使用環境
VC++、MFC、Windows2000
#define CHANGED_STATE ChangedState
<CPComDlg.cpp>
// 親プロセスのダイアログのコンストラクタ
CPComDlg::CPComDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPComDlg::IDD, pParent)
{
//前略
m_nRegisteredMessage = RegisterWindowMessage(CHANGED_STATE);
}
// 親プロセスの送信メソッド
void CPComDlg::OnButtonSend()
{
PostMessage(HWND_BROADCAST, m_nRegisteredMessage, 0, 0);
}
------------------------------------------------------------------------
<CPChildDlg.h>
// 子プロセスのダイアログ
// CPChildDlg ダイアログ
class CPChildDlg : public CDialog
{
// 前略
// 生成されたメッセージ マップ関数
//{{AFX_MSG(CPChildDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg LRESULT OnUserEvent(WPARAM wParam, LPARAM lParam); // ←定義し
た関数
afx_msg void OnButtonSend();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
------------------------------------------------------------------------
<CPChildDlg.cpp>
UINT nRegisteredMessage = RegisterWindowMessage(CHANGED_STATE);
BEGIN_MESSAGE_MAP(CPChildDlg, CDialog)
//{{AFX_MSG_MAP(CPChildDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(nRegisteredMessage, OnUserEvent)
ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CPChildDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_nRegisteredMessage = ::nRegisteredMessage;
}
LRESULT CPChildDlg::OnUserEvent(WPARAM wParam, LPARAM lParam)
{
AfxMessageBox(イベント受信成功);
return TRUE;
}
------------------------------------------------------------------------
↑上記のOnUserEvent() にどーしても飛んでこないです。
よろしければ示唆願います。
ON_MESSAGE は //}}AFX_MSG_MAP の外に記述しなければだめです。
すいません。書き忘れました。
定義した関数も同じです。
RegisterWindowMessage()で登録したメッセージハンドラは、
ON_REGISTERED_MESSAGE()でマップに追加します。
高1さま、dairygoodsさま、ありがとうございました。
お二方の内容を併合するとうまくいきました。
<CPChildDlg.h>
// 生成されたメッセージ マップ関数
//{{AFX_MSG(CPChildDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnButtonSend();
//}}AFX_MSG
LRESULT OnUserEvent(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
<CPChildDlg.cpp>
BEGIN_MESSAGE_MAP(CPChildDlg, CDialog)
//{{AFX_MSG_MAP(CPChildDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)
//}}AFX_MSG_MAP
ON_REGISTERED_MESSAGE(nRegisteredMessage, OnUserEvent)
END_MESSAGE_MAP()