본문 바로가기

# IT, Computer Science/MFC, API

MFC 사용자 정의 메시지를 이용한 통신

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
#define WM_MSGTEST WM_USER+10      // 숫자는 적당한 값을 넣으세요.


// MsgTest1.h : header file (MsgTest Class에 메시지 맵 정의)

class CMsgTest : public CWnd
{
// Construction
public:
     CMsgTest();
        :

// Generated message map functions
protected:
     //{{AFX_MSG(CMsgTest)
          // NOTE - the ClassWizard will add and remove member functions here.
     //}}AFX_MSG
     afx_msg LRESULT OnMsg(WPARAM wParam, LPARAM lParam);  // 추가
     DECLARE_MESSAGE_MAP()
};
//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------
// MsgTest1.cpp : implementation file  (메시지 맵 등록, 메서드 구현)

            :
CMsgTest::CMsgTest()
{
}

CMsgTest::~CMsgTest()
{
}
          :
BEGIN_MESSAGE_MAP(CMsgTest, CWnd)
     //{{AFX_MSG_MAP(CMsgTest)
          // NOTE - the ClassWizard will add and remove mapping macros here.
     //}}AFX_MSG_MAP
     ON_MESSAGE(WM_MSGTEST, OnMsg)        //추가
END_MESSAGE_MAP()
          :
LRESULT CMsgTest::OnMsg(WPARAM wParam, LPARAM lParam)   //메서드 추가
{
      AfxMessageBox(_T("Recv Msg"));    // 해당 동작 확인을 위해서 MessageBox사용, 원하는 코드 삽입...
}


// MsgExDlg.cpp
      :
void CMsgExDlg::OnButton1()
{
     // TODO: Add your control notification handler code here

     //pMsgTest는 CMsgTest 클래스의 포인터
     //::SendMessage(pMsgTest->m_hWnd, WM_MSGTEST, NULL, NULL); 도 가능…. ::PostMessage()가능.

     ::SendMessage(pMsgTest->GetSafeHwnd(), WM_MSGTEST, NULL, NULL); // 메시지 보냄
     //메시지를 보내서, CMsgTest::OnMsg() 실행이 됨......
}
     :
//----------------------------------------------------------------------------------------


※ 클래스 포인터를 이용하지 않고 다이얼로그 핸들로 바로 넣을 수 있음
탭에서 각 다이얼로그를 생성할때...의 한 예시
(다이얼로그 <-> 다이얼로그 시 핸들 얻어오는 법)

extern HWND hwnd; // 이것은 전역변수로 사용선언 (stdafx.cpp에 선언)

m_dlg.Create(IDD_DIALOG_1, &m_Tab);
hwnd=m_dlg.GetSafeHwnd();
::SendMessage(hwnd, WM_MSGTEST, NULL, NULL); // 메시지 보냄

똑같이 사용하면됨




자료 참조 :
[MFC] 사용자 정의 메시지 (WM_USER, #define 사용)(http://i0nucleus.egloos.com/2987466)
SendMessage 사용시 핸들 얻어오는 방법??(http://www.tipssoft.com/bulletin/board.php?bo_table=QnA&wr_id=17647)
Handle 질문입니다.(http://www.tipssoft.com/bulletin/board.php?bo_table=QnA&wr_id=17670)