sendmessage 사용자 정의 메시지 --------------

2180 단어 userdialog
dialog 중,
방법1,수동으로 메시지 및 처리 함수를 연결하여 ONMESSAGE( , )
1. CxxDlg의 h 파일에서 메시지 정의
4
#define WM_MY_DOSOME WM_USER+1 // do something
CxxDlg의 h 파일에서 AFXMSG에 메시지 처리 함수 한 줄을 추가하는 성명, afxmsg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2);아래와 같다
	//{{AFX_MSG(CTestmessageDlg)
	afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2);
	//}}AFX_MSG
2.CxxDlg의 cpp 파일에서 AFXMSG_MAP에 메시지 한 줄과 메시지 처리 함수 매핑, ONMESSAGE(WM MY DOSOME, DoSomeThing)
4
	//{{AFX_MSG_MAP(CTestmessageDlg)	
	ON_MESSAGE(WM_MY_DOSOME,DoSomeThing)// WM_MY_DOSOME DoSomeThing 
	//}}AFX_MSG_MAP
CxxDlg의 cpp 파일에 메시지 처리 함수 정의를 추가합니다.
4
LRESULT CTestmessageDlg::DoSomeThing(WPARAM iParam1,LPARAM iParam2)
{
	MessageBox(" , 。"," ",MB_OK);
	// iParam1,iParam2  。
	return 0;
}
CxxDlg의 cpp 파일에 필요한 곳에 메시지를 보내는 코드를 추가합니다.
::SendMessage(this->m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM) 0);	
//this->m_hWnd 수신자 핸들
//WM_MY_DOSOME 메시지
//0,0 매개변수
방법 2.기존 가상 함수 윈도우 Proc 창 함수를 사용하여 메시지 수신 및 처리
1. CxxDlg의 h 파일에서 메시지 정의
#define WM_MY_DOSOME WM_USER+1 // do something
2.ctrl+w는 CxxDlg 클래스에 가상 함수인 WindowProc를 추가하여 함수체를 다음과 같이 채웁니다.
LRESULT CTestmessage1Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (message==WM_MY_DOSOME)
	{
		AfxMessageBox("i got it");
	}
	return CDialog::WindowProc(message, wParam, lParam);
}
3.CxxDlg의 cpp 파일에 메시지를 보내는 코드를 추가합니다.
::SendMessage(this->m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM) 0);	

물론 시스템이 미리 정의한 일부 메시지를 보낼 수도 있고, 일부 메시지는 미리 정의된 처리 함수를 거치면
예를 들어 창에 닫기 메시지를 보내면 창을 닫을 수 있다
void CtseT1Dlg::OnBnClickedButton1()
{
	//::SendMessage(this->m_hWnd, WM_CLOSE, (WPARAM) 0, (LPARAM) 0);     
	SendMessageW( WM_CLOSE, (WPARAM) 0, (LPARAM) 0);  
}

refer to http://www.cnblogs.com/wqj1212/archive/2008/03/03/1089298.html

좋은 웹페이지 즐겨찾기