1. WM_USER 란?
뭐 일단 이름에서 보이듯이 Window Message 이다.
근데 이 메세지가 뭐냐 하니
사용자가 메세지를 전달하고 싶을경우가 분명히 있을거란 말이지.
근데 사용자가 아무렇게나 뭐 예를들어 #define message 1004
이렇게 정의하고 쓸수 있지.. 암 근데 이게 시스템에서 이미 쓰는 주소라면 문제가 되는거지
그래서 미리 시스템에서 사용자가 Window Message로 사용할수 있게 예약하둔 공간을 가리키는 포인터다.
2. WM_USER의 범위는?
이건 뭐 일단 질문이 조금 이상한데
시스템에서 사용자의 메세지 사용을 위해 0x0400 부터 0x7FFF 까지의 주소를 예약 해 뒀다고 한다.
WM_USER는 저 구역의 시작점을 나타내는 0x0400 이 메모리 번지를 가리키는 포인터 고.
그래서
WM_USER + 100 이런식으로 사용이 가능하다.
3. WM_USER 의 전송은?
자신의 윈도우에서 처리할때는
PostMessage(WM_USER);
SendMessage(WM_USER);
모든 윈도우로 전송할때는
::PostMessage(HWND, WM_USER, WPARAM, LPARAM);
::SendMessage(HWND, WM_USER, WPARAM, LPARAM);
을 이용하여 전송 해주면 된다.
4. WM_USER 의 수신 및 처리는?
메세지를 받아서 처리하고자 할때는 세가지 작업을 해 주어야 한다.
첫째는 MESSAGEMAP 에 추가를 해주는것.
BEGIN_~ 와 END_~ 사이에 ON_MESSAGE(WM_USER, OnFunction); 를 추가해준다
둘째는 헤더파일에 메세지 수신시 처리할 루틴을 선언 해준다
Afx_msg LRESULT OnFunction( WPARAM wParam, LPARAM lParam );
세번째로 선언된 처리 루틴의 내용을 작성 해준다.
LRESULT 클래스명::OnFunction( WPARAM wParam, LPARAM lParam )
{
처리할 내용 작성;
}
이렇게 세가지를 추가해주면 원하는 메세지를 받았을때 처리하고자 하는 대로 처리가 가능하다.
'Programming > C, C++, MFC' 카테고리의 다른 글
유효숫자 만큼 나타내기 (0) | 2013.11.07 |
---|---|
char* <--> CString 변환 함수 (0) | 2013.11.07 |
Dialog based program 에서 Menu 만들기. (0) | 2013.08.06 |
Device Context ( DC ) (1) | 2013.08.06 |
GetDlgItem() 함수를 이용하기 (0) | 2013.07.03 |