티스토리 뷰

카테고리 없음

ON_REGISTERED_MESSGAE

에어버스 2019. 9. 29. 14:51

다른 프로그램에게 메시지 전달

ON_REGISTERED_MESSGAE 를 사용한다.

메시지 보내는 곳에서 RegisterWindowMessage()로 등록한 UINT 값을 메시지로 보낸다.
SendMessage() 로 보내면 무슨 문제인지 "메시지 전송 완료" 창을 보이지 않고 Lock 걸려
일단, PostMessage() 로 메시지 보낸다.

메시지 보내는곳 코드 5행 처럼 보낼 윈도우 핸들은 HWND_BROADCAST 로 지정하고, 메시지는 RegisterWindowMessage() 반환값으로 지정하면 된다.

 

메시지 보내는곳에서 RegisterWindowMessage() 와 똑같이 메시지 받는곳에서는 외부 변수로 만든다.

 

<메시지 보내는 곳>

1
2
3
4
5
6
7
8
void CTest1Dlg::OnBnClickedButtonMsg()
{
    AfxMessageBox(TEXT("메시지 전송 전"));
    UINT uMsg = ::RegisterWindowMessage(TEXT("TEST1"));
    ::PostMessage(HWND_BROADCASTuMsg, WPARAM(1), LPARAM(2)); 
    //::SendMessage(HWND_BROADCAST, uMsg, WPARAM(1), LPARAM(2));
    AfxMessageBox(TEXT("메시지 전송 완료"));
}
cs

 

<메시지 받는곳>

1
2
3
4
5
6
class CTest2Dlg : public CDialogEx
{
...
public:
    LRESULT OnRevMsg(WPARAM wParam, LPARAM lParam);    
};
cs

아래 코드 1행처럼 메시지 보내는곳에서 등록한거와 같게 외부 변수로 만든다.
(지역변수로 하면 5행에서 에러난다)

메시지 처리함수를 등록하고 만든다.
(위 코드 5행, 아래코드 5, 8~13행)

1
2
3
4
5
6
7
8
9
10
11
12
13
UINT uMsg = ::RegisterWindowMessage(TEXT("TEST1")); // 외부변수
 
BEGIN_MESSAGE_MAP(CTest2Dlg, CDialogEx)
...
    ON_REGISTERED_MESSAGE(uMsg, OnRevMsg)
END_MESSAGE_MAP()
 
LRESULT CTest2Dlg::OnRevMsg(WPARAM wParam, LPARAM lParam)
{
    CString str; str.Format(TEXT("%d"), int(lParam));
    AfxMessageBox(str);
    return 0L;
}
cs

 <실행결과>

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31