티스토리 뷰

Visual Studio 2012


자식 다이얼로그에서 다른 자식 다이얼로그에게 메시지 보내기(SendMessage)


저번엔 부모클래스를 선언해와서 활용했지만, 좀더 간편하게 핸들만 바로 사용하는 방법이다.


다이얼로그 명칭 생략하고 편하게 자식1, 자식2이라 칭한다.


자식1에서 자식2의 핸들을 통해 메시지 보내는 방법


1. 보낼 메시지 설정(자식1, 자식2에 정의해야함)


#define UWM_CUSTOM1	(WM_USER+1)


2. 자식2에 사용자 지정 메시지 추가


* 프로젝트 - 클래스 마법사 - 클래스 선택(자식2) - 메시지탭 - 사용자 지정 메시지 추가



3. 자식2에 사용자 지정 메시지 함수와 메시지 선언


// Dialog2.cpp : 구현 파일입니다.
//

#define UWM_CUSTOM1	(WM_USER+1) //사용자 메시지 선언

afx_msg LRESULT CDialog2::OnUwmCustom1(WPARAM wParam, LPARAM lParam)
{
	MessageBox("메시지받았다!",0,0);
	return 0;
}


4. 자식1에 핸들, setter함수, 사용자 메시지 선언과 sendmessage활용


- 핸들 및 setter함수 선언


// Dialog1.h
// CDialog1 대화 상자입니다.

class CDialog1 : public CDialogEx
{
	...
public:
	HWND m_dlg2_hWnd;
	void setter(HWND hw)
	{
		m_dlg2_hWnd = hw;
	}
};


- 사용자 메시지 선언 및 sendmessage사용


// Dialog1.cpp : 구현 파일입니다.
//

#define UWM_CUSTOM1	(WM_USER+1) //사용자 메시지 선언

//사용할 함수
...
::SendMessage(m_dlg2_hWnd,UWM_CUSTOM1,0,(LPARAM)&m_ctrList);
...


5. 부모다이얼로그에 자식1, 자식2 생성하고 setter함수 사용하여 핸들 지정하기


// ModelessDDlg.cpp : 구현 파일
//

// CModelessDDlg 메시지 처리기

BOOL CModelessDDlg::OnInitDialog()
{
	...
	//Dialog 1 Initialize
	m_dlg1 = new CDialog1(this);
	m_dlg1->Create(IDD_DIALOG1, CWnd::GetDesktopWindow());

	//Dialog 2 Initialize
	m_dlg2 = new CDialog2(this);
	m_dlg2->Create(IDD_DIALOG2, CWnd::GetDesktopWindow());

	m_dlg1->setter(m_dlg2->GetSafeHwnd());

	return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}

댓글