CView1继承CFormView,CView2继承CView类我想通过在视图1CView1里通过按一个按扭然后在CView2里实现绘图功能CView1.cpp有关内容如下#include "CView2.h"
void CView1::OnButton1() 
{
// TODO: Add your control notification handler code here
CView2 *view=(CView2*)GetDocument();
view->Do();//执行CView2的绘图功能
}CView2.cpp的有关内容如下
{
void CView2::Do()
{   
CDC *dc=GetDC();
         dc->Rectangle(10,10,100,100);
         ReleaseDC(dc);
//AfxMessageBox(_T("hello!"));
}如果CView2::Do()里只保留AfxMessageBox("...")那么程序可以正常运行,但是如果用了CDC *dc=GetDC()运行时就会弹出一个错误对话框,不知这个是什么道理啊?以下是具体代码下载,文件很小,下起来很快,望大家看看.并且有什么好的传递方法请指教。
www.fox-nice.com/milozy/FormTest.rar

解决方案 »

  1.   

    CView2 *view=(CView2*)GetDocument();
    这是什么语句啊?
    GetDocument返回文档类型指针,怎么可以转换成CView2呢??
      

  2.   

    不是我笔误,的确是我写错了。以下是更正的,原来书上的意思是通过对doc对象里的变量改变而达到对view视图的更新,也就是以下的传递消息方式CView1->CFormDoc->CFormView不知大家通常是否也是这样在分割视图里传递消息的?有人再说下传递消息的思路我就马上结贴了,谢谢。void CView1::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    CFormExpDoc *pDoc=(CFormExpDoc*)GetDocument();
    pDoc->m_choose=1;
    pDoc->UpdateAllViews(this);
    }
      

  3.   

    深入浅出MFC里是这样说的:
    一般的消息是按照从子 -> 父直接一步步传递的。
    而wm_command消息的传递顺序是:view ->document ->doctemplate ->frame ->app
      

  4.   

    那么现在是从左边的一个窗口传给右边的一个窗口,左边的是基于FormView类的,右边的就是一开始生成的view窗口,那么当在左边窗口按下按扭后消息应该怎么传递到右边的窗口啊?
      

  5.   

    右窗口的view ->sendmessage(WM_COMMAND, 按钮ID, 按钮句柄)然后再右窗口的view中重写OnCommand就能收到这个消息
      

  6.   

    开始出添加
    #include "MainFrm.h"Button函数中:
    CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd();
    CView2 *pView = (CView2 *)pMainFrame->m_wndSplitter.GetPane(0, 1);
    pView->Do();