如是文档视图结构,在Doc内:
POSITION pos = GetFirstViewPosition();
CYourView* pView = (CYourView*)GetNextView( pos );如不在Doc内:
在CView类内加入成员函数
声明:
static CDNMonitorView * GetView();
定义:
CDNMonitorView * CDNMonitorView::GetView()     
{
   CMDIChildWnd * pChild =
   ((CMDIFrameWnd*)(AfxGetApp()->m_pMainWnd))->MDIGetActive();      if ( !pChild )
          return NULL;      CView * pView = pChild->GetActiveView();      if ( !pView )
         return NULL;      // Fail if view is of wrong kind
      if ( ! pView->IsKindOf( RUNTIME_CLASS(CDNMonitorView) ) )
         return NULL;      return (CDNMonitorView *) pView;
   } 
在你调用CView指针的文件里#include CView.h
然后直接调用GetView()即可

解决方案 »

  1.   

    是这样的,我现在在串口接数,一旦串口接收有数据,CSerialPort类的一个对象就发消息给View里的一个函数。所以我首先应该得到View的指针(是不是这样?)
    然后on_message(wm_xx,pView->oncommunication),对吗?
    盼指教
      

  2.   

    不对. on_message是用来申明窗口MESSAGE MAP的编译时刻解决.执行时使用SENDMESSAGE通讯.如果某个VIEW处理MESSAGE的话,你应该记住这个VIEW的指针,然后,直接发SENDMESSAGE给他.  这种程序一般要多线程做.
      

  3.   

    如果是串口通信的话,恐怕要用到多线程,要想发消息,应获得CView的句柄
    如:PostMessage(pView->m_hWnd,WM_YourMessage,0,0);
    如果线程之间通信的话,可考虑使用事件机制,具体可参照《Windows核心编程》
      

  4.   

    忘了,昨天的 函数是MDI的,如果是SDI,用下面的函数:
    CMyView::GetView():    // View implementation file
       CMyView * CMyView::GetView()
       {
          CFrameWnd * pFrame = (CFrameWnd *)(AfxGetApp()->m_pMainWnd);      CView * pView = pFrame->GetActiveView();      if ( !pView )
             return NULL;      // Fail if view is of wrong kind
          // (this could occur with splitter windows, or additional
          // views on a single document
          if ( ! pView->IsKindOf( RUNTIME_CLASS(CMyView) ) )
             return NULL;      return (CMyView *) pView;
       }