在VC中想从void CListenSocket::OnReceive(int nErrorCode)函数中响应一个消息PostMessage(AfxGetApp()->m_pMainWnd->m_hWnd,RE_RECEIVED,(WPARAM)lpBuf1,0),将收到的文本通过lpBuf1传给视图中的LRESULT CclientView::OnReceive(WPARAM wParam,LPARAM lParam)消息函数,也没有误,就是不能跳到该消息函数中执行,是不是获得的指针有问题?请大家指点.

解决方案 »

  1.   

    PostMessage(AfxGetApp()->m_pMainWnd->m_hWnd,RE_RECEIVED,(WPARAM)lpBuf1,0),
    这一句你是要向MainFrame发送RE_RECEIVED消息,在CMainFrame中你是否定义了该消息?而看这一句LRESULT CclientView::OnReceive(WPARAM wParam,LPARAM lParam)
    仿佛RE_RECEIVED的执行是在CclientView中.有两种方法改:
    1、让RE_RECEIVED的执行在CMainFrame中:将OnReceive(WPARAM wParam,LPARAM lParam)这个函数放在CMainFrame中,同时,检查是否在CMainFrame中定义了RE_RECEIVED2、让RE_RECEIVED的执行在CclientView中:将PostMessage(AfxGetApp()->m_pMainWnd->m_hWnd,RE_RECEIVED,(WPARAM)lpBuf1,0),这一句的第一个参数改为CclientView的指针,可以通过以下两句获取视图的指针:
    CMainFrame * pMainFrm = (CMainFrame*)AfxGetMainWnd();
    //找到CclientView指针
    CView * active = ((CclientView*)pMainFrm->GetActiveView();
      

  2.   

    AfxGetApp()->m_pMainWnd得到的是CMainFrame的指针,而不是CclientView的指针。如果是单文档程序,调用AfxGetApp()->m_pMainWnd再调用GetActiveView()就可以得到视图的指针;
    如果是多文档程序,
    CMDIFrameWnd *pFrame = 
                 (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;// Get the active MDI child window.
    CMDIChildWnd *pChild = 
                 (CMDIChildWnd *) pFrame->GetActiveFrame();// or CMDIChildWnd *pChild = pFrame->MDIGetActive();// Get the active view attached to the active MDI child
    // window.
    CMyView *pView = (CMyView *) pChild->GetActiveView();
      

  3.   

    谢谢,好像可以进到我的自定义消息函数中了,CMainFrame * pMainFrm = (CMainFrame*)AfxGetMainWnd(); 
    //找到CclientView指针 
    CView * active = ((CView*)pMainFrm->GetActiveView();我用这两句获得视图指针,可是怎么数组中没有值呢。我怎么才能把CView转换成CclientView呢?
      

  4.   

    我怎么才能把CView转换成CclientView呢?强制转换就就OK了吗?