2008년 12월 24일
WM_COPYDATA (3)
WM_COPYDATA에 대한 이전 포스팅에서 WindowProc 멤버 함수를 오버라이드 해서 외부 프로세스로 부터 데이터를 전달 받는 로직을 구현하였었습니다. 그렇게 한 이유는 WindowProc 멤버 함수의 WPARAM wParam 파라메터로 전달받는 외부 프로세스의 윈도우 핸들(HWND)를 이용하기 위해서였는데요. MSDN에 찾아보니 OnCopyData 이벤트 핸들러의 CWnd* pWnd 파라메터가 바로 외부 프로세스의 윈도우 객체라고 하네요 ;; 아무래도 WindowProc 멤버함수를 오버라이드해서 switch case 문을 이용해 이벤트들을 나열하는 것 보다야 OnCopyData 이벤트 핸들러를 사용하는게 코드를 더 깔끔하게 하지 않나 싶습니다.

아래는 OnCopyData 이벤트 핸들러의 pWnd 파라메터에 대한 MSDN의 설명입니다.


pWnd - A pointer to a CWnd object that is sending the data.
이전 포스팅의 WM_COPYDATA의 WindowProc 멤버 함수를 OnCopyData로 변경한 코드 입니다. 실행 결과는 이전 포스팅의 결과와 같습니다.


BOOL CProcessBDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
    // TODO: Add your message handler code here and/or call default
    //
    //    프로토콜에 따른 처리를 위해서 ..
    //
    switch(pCopyDataStruct->dwData)
    {
    case Protocol::PROTOCOL_BOOKINFO:
        {
            //
            //    전송받은 데이터(COPYDATASTRUCT 구조체)를 풀어서 BookInfo에 셋팅합니다.
            //
            BookInfo bookInfo;

            //((BookInfo*)pcds->lpData)->m_nID = 1;
            bookInfo.m_nID = ((BookInfo*)pCopyDataStruct->lpData)->m_nID;
            _tcsncpy(bookInfo.m_szName, ((BookInfo*)pCopyDataStruct->lpData)->m_szName, pCopyDataStruct->cbData - sizeof(int));
            //
            //    전송받은 데이터를 메시지 박스를 출력합니다.
            //
            CString strReceiveMsg;
            strReceiveMsg.Format(_T("ID : %d\tName : %s"), bookInfo.m_nID, bookInfo.m_szName);

            AfxMessageBox(strReceiveMsg);           
            //
            //    파라미터 pWnd를 이용해서 데이터를 전송한 프로세스에게 데이터를 에코합니다.
            //
            ::SendMessage(pWnd->GetSafeHwnd(), WM_COPYDATA, 0, (LPARAM) pCopyDataStruct);

            break;
        }
    case Protocol::PROTOCOL_COOKINFO:
        {
            // Do something ..
            break;
        }
    }
    return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}


이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by greenfrog | 2008/12/24 08:59 | C++ / WIN32 / MFC | 트랙백 | 덧글(0)
트랙백 주소 : http://greenfrog7.egloos.com/tb/1265439
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>