複数プロセス間でPostMessageができません – プログラミング – Home

複数プロセス間でPostMessage...
 
通知
すべてクリア

[解決済] 複数プロセス間でPostMessageができません


Rinset
 Rinset
(@Rinset)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

複数プロセス間で、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() にどーしても飛んでこないです。
よろしければ示唆願います。


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

ON_MESSAGE は //}}AFX_MSG_MAP の外に記述しなければだめです。


返信引用
高1
 高1
(@高1)
ゲスト
結合: 23年前
投稿: 14
 

すいません。書き忘れました。
定義した関数も同じです。


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

RegisterWindowMessage()で登録したメッセージハンドラは、
ON_REGISTERED_MESSAGE()でマップに追加します。


返信引用
Rinset
 Rinset
(@Rinset)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

高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()


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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