검색결과 리스트
글
이번 회사 프로젝트 진행중 스레드 안에서 컨트롤을 생성해야 하는 일이 생겼는데
해결도 못하는 시스템 오류가 ㄷㄷㄷ....
결국 사용자 정의 메세지를 사용하기로 했습니다.
1. 메세지를 정의한다
:
윈도우 자체적으로 WM_USER 라는 사용자가 정의해서 사용 할 수 있는 메세지가 있습니다.
WM_USER+1, WM_USER+2 이렇게 사용합니다.
그렇지만 좀더 멋드러지게 사용하고 싶다면...
이렇게 정의해서 사용하시면 좀더 폼납니다. ^^;
메세지는 보통 따로 헤더파일을 연결해서 사용하기도 하고
전역적으로 사용하고 싶으면 StdAfx.h에 선언합니다.
2. 실제 사용할 윈도우 객체의 메세지 멤버함수를 정의합니다.
:
위에 보시면 헤당 .h 파일의 클래스 안에 선언해 줍니다.
//{{AFX_MSG(CThreadDlg)
...
//}}AFX_MSG
위 안에는 선언하지 마세요 주석으로 보이지만 이건 클래스 위져드가 사용하는
코드입니다. 여기 잘 못 선언해 주시면 클래스 위져드가 알아져 지우거나 위져드 상에서
다른 코드들이 안보이는 불상사가 발생합니다.
그래서 저 같은 경우는
//}}AFX_MSG 여기 다음줄에 선언해 줍니다.
그리고 .cpp 파일에 위에서 선언한 사용자 정의 함수를 정의해 줍니다.
3. .cpp 파일의 메세지 맵에서 연결해 줍니다.
보시면 알겠지만 2번과 같이 여기도 //}}AFX_MSG_MAP 다음에 선언해주세요
4. 실제 사용은 SendMessage() 함수나, PostMessage() 함수를 이용해서 해주시면 됩니다.
해결도 못하는 시스템 오류가 ㄷㄷㄷ....
결국 사용자 정의 메세지를 사용하기로 했습니다.
1. 메세지를 정의한다
:
윈도우 자체적으로 WM_USER 라는 사용자가 정의해서 사용 할 수 있는 메세지가 있습니다.
WM_USER+1, WM_USER+2 이렇게 사용합니다.
그렇지만 좀더 멋드러지게 사용하고 싶다면...
#define WM_MY_MESSAGE WM_USER+1
이렇게 정의해서 사용하시면 좀더 폼납니다. ^^;
메세지는 보통 따로 헤더파일을 연결해서 사용하기도 하고
전역적으로 사용하고 싶으면 StdAfx.h에 선언합니다.
2. 실제 사용할 윈도우 객체의 메세지 멤버함수를 정의합니다.
:
//{{AFX_MSG(CThreadDlg) // Generated message map functions virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnDestroy(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnClose(); //}}AFX_MSG afx_msg LONG OnMyMessage(UINT wParam, LONG lParam); DECLARE_MESSAGE_MAP()
위에 보시면 헤당 .h 파일의 클래스 안에 선언해 줍니다.
//{{AFX_MSG(CThreadDlg)
...
//}}AFX_MSG
위 안에는 선언하지 마세요 주석으로 보이지만 이건 클래스 위져드가 사용하는
코드입니다. 여기 잘 못 선언해 주시면 클래스 위져드가 알아져 지우거나 위져드 상에서
다른 코드들이 안보이는 불상사가 발생합니다.
그래서 저 같은 경우는
//}}AFX_MSG 여기 다음줄에 선언해 줍니다.
그리고 .cpp 파일에 위에서 선언한 사용자 정의 함수를 정의해 줍니다.
3. .cpp 파일의 메세지 맵에서 연결해 줍니다.
BEGIN_MESSAGE_MAP(CThreadDlg, CDialog) //{{AFX_MSG_MAP(CThreadDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_DESTROY() ON_WM_LBUTTONDOWN() ON_WM_CLOSE() //}}AFX_MSG_MAP ON_MESSAGE(WM_CREATEVS, OnCreateVS) END_MESSAGE_MAP()
보시면 알겠지만 2번과 같이 여기도 //}}AFX_MSG_MAP 다음에 선언해주세요
4. 실제 사용은 SendMessage() 함수나, PostMessage() 함수를 이용해서 해주시면 됩니다.
'C/C++ > VC++ / MFC' 카테고리의 다른 글
[MFC] Dialog와 FormView의 초기화 위치 (0) | 2008.04.22 |
---|---|
[MFC] SS_NOTIFY와 Reflection Message (0) | 2008.03.24 |
[Design Patterns] C++을 사용한 Singleton (0) | 2008.03.17 |
[MFC] MFC에서 클래스 전역으로 사용하기 (0) | 2008.03.11 |
전처리 명령문에서 사용하는 defined 연산자 (0) | 2008.03.03 |
RECENT COMMENT