티스토리 뷰

UINT WINAPI RegisterWindowMessage(
  _In_  LPCTSTR lpString
);

 

어플리케이션 간에 통신 방법을 보통 IPC (Inter-Process Communication)라고 한다.

 

IPC는 여러가지 통신 방법을 통틀어 표현한 단어일 뿐이고, Win32 환경의 어플리케이션에서는 

 

Named Pipe, Mail Slot, Shared Memory 등 여러가지 기법이 있는데

 

앞서 말한 3가지의 기법보다 더 효율적인 RegisterWindowMessage API를 이용한 Broadcast 메시지 처리 방식이다.

 

실무에서 Named Pipe를 사용하여 IPC 통신을 구현했었지만 생각보다 개발 시간이 소요되고, 예외 처리할 사항이 많았다.

 

정수나 문자열을 전달한다면 WPARAM, LPARAM 을 이용한 메시지 통신보다 적절한 것은 없을 것이다.

 

아래는 간단하게 RegisterWindowMessage 함수를 이용한 메시지 처리 예제를 설명하였다.

 

송신측

1. 전역 변수에 메시지 등록 (클래스내 static 멤버로 관리해주는 것이 더 좋겠다.)

 

UINT g_nRegMsg = RegisterWindowMessage(_T("TestMsg"));

 

2. 버튼에 데이터 전송을 위한 PostMessage 작성

 

void CTestDlg::OnBnClickedSendButton()

{

int nTest = 2015;    // 자주 타는 버스 번호;;;

::PostMessage(HWND_BROADCAST, g_nRegMsg, (WPARAM)nTest, 0);

}

 

수신측

1. 마찬가지로 전역 변수에 메시지 등록

 

UINT g_nRegMsg = RegisterWindowMessage(_T("TestMsg"));

 

2. Message Handler를 Message Map에 추가

 

ON_REGISTERD_MESSAGE(g_nRegMsg, &CTestDlg::OnTestMsg)

 

3. 메시지를 처리할 함수 구현

 

LRESULT CTestDlg::OnTestMsg(WPARAM wParam, LPARAM lParam)

{

int nRet = (int)wParam;

TCHAR szRet[10] = {0};

_itot_s(nRet, szRet, 10);

 

AfxMessageBox(szRet);

}

 

댓글
댓글쓰기 폼