서로다른 윈도우끼리(다른 프로세스에도 적용됨) 데이터를 주고 받고자 할때 윈도우에서 제공하는 WM_COPYDATA를 사용해 보기로 한다.
2.본문
하나의 윈도우에는 윈도우가 관리하는 논리적 주소공간이 있다. 이러한 이유때문에 하나의 윈도우에서 다른 윈도우로 포인터를 넘겨주고자 한다면 그리 쉬운방법이 아님을 알 수 있다. 하지만, WM_COPYDATA를 사용하면 논리적 주소공간에 상관없이 다른 윈도우로 한쪽의 논리적 주소를 넘길 수 있다. 예제를 살펴보기로 하자.
3.예제
// source window에서.. void CSourceWnd::Write(const void* lpBuf, UINT nCount) { CWnd *pTraceWnd = CWnd::FindWindow(TRACEWND_CLASSNAME, NULL); if (pTraceWnd) { COPYDATASTRUCT cds; cds.dwData = ID_COPYDATA_TRACEMSG; /* Flag 용도 */ cds.cbData = nCount; cds.lpData = (void*)lpBuf; pTraceWnd->SendMessage(WM_COPYDATA, (WPARAM)AfxGetApp()->m_pMainWnd->GetSafeHwnd(), (LPARAM)&cds); } else { AfxMessageBox("윈도우를 찾을 수 없습니다."); } } ////////////////////////////////////////////////////// // target windows에서.. // 메세지 핸들링 설치 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_MESSAGE(WM_COPYDATA, OnTraceMsg) . . . //}}AFX_MSG_MAP END_MESSAGE_MAP() LRESULT CMainFrame::OnTraceMsg(WPARAM wParam, LPARAM lParam) { COPYDATASTRUCT* pcds = (COPYDATASTRUCT*)lParam; // pcds 를 사용한다.. return 0; }
원문 : http://cafe.naver.com/cyberzone/170
댓글 없음:
댓글 쓰기