我在自定义一个dialogbar中的OnInitDialog() 里
定义了一个指向C**view的指针
CMainFrame  *pMain=(CMainFrame *)GetParentFrame();
CSTestView* p=(CSTestView*)(pMain->GetActiveView());
p->Invalidate();
但是在执行窗体重绘这个函数时就发生错误,这是为什么,请大家指点指点!!

解决方案 »

  1.   

    你说的对的,好像是空指针,我调试到那里的时候显示p0x00000000 {CSTestView hWnd=???}
      

  2.   

    CMainFrame *pMain=(CMainFrame *)GetParentFrame();
    ->
    CMainFrame *pMain=(CMainFrame *)AfxGetMainWnd();我猜你是要这样吧
      

  3.   

    你的窗口是框架窗口吗?比较下GetParentFrame 和 AfxGetMainWnd
      

  4.   

    VisualEleven:
    不行,Afx这个函数不能用在我这个程序里,我刚试过了
      

  5.   

    是框架窗口,但是我实在dialogbar里面定义view的指针的,本来想直接定义一个
    C**View *p=new C**VIew(),发现好像不行,所以就用上述方法进行定义,虽然定义成功,但是无法调用重绘函数,而且调试时发现p的指针的地址都是问号,好像没有找到view类的指针
      

  6.   

    不能用AfxGetMainWnd()?应该不会吧
      

  7.   

    想直接定义一个,是不行的。
    你的是MDI程序?
      

  8.   

    找了两个网址,参考下吧,多试试。什么GetParent之类的,也都用下。
    http://www.cnblogs.com/alonecat06/archive/2010/02/08/1666124.html
    http://www.cppblog.com/justin-shi/archive/2008/06/14/53196.html
      

  9.   

    不好意思我看错了
    采用AfxGetMainWnd(),pMain指针的值也都变成了问号
    真正出错是在CSTestView* p=(CSTestView*)(pMain->GetActiveView());这句话,就是采用AfxGetMainWnd()的时候
      

  10.   

    就目前看来我的做法无法获得view类指针的句柄,hwnd这个值是空的,所以导致调用重绘出现错误,那么到底该怎么获得这个句柄呢
      

  11.   

    应该是你的View窗口还没有窗口好,你可以PostMessage一个自定义的消息,然后在自定义的消息的消息响应函数中加入你上面的代码
      

  12.   

    VisualEleven:
    领导确实很有眼界啊,被你一语道破,我只有40分了,就都给你了,其他兄弟不要恨我