我现在在主框架的菜单栏中设置了一个响应菜单,单击响应函数OnSet(),想在此函数中调用另一个函数把视图区域重绘。但不知调用什么函数,怎么调用。
菜单响应函数为:
void CMainFrame::OnSet() {
      ((CView *)GetActiveView())->UpdateWindow();
}
但这样调用,视图并不重绘。我测试的函数是:
void CWjhlumeiView::OnPaint() {
        static int aa=0;
if(aa==0){
aa++;
}
else
MessageBox("lumei11","wjhlumei",MB_OK);}
一打开时没有输出任何信息,当点击OnSet()对应的菜单时并没有把MessageBox("lumei11","wjhlumei",MB_OK);这消息显示出来。但当把视图区域随便改变一下消息就显示出来了。
我不知道OnSet()函数中应该怎么写,调用什么函数来。若改用发送消息的形式,我测试了还是没用,不知是为啥,也许是我写错了代码。
请各位高手指教。不胜感激!

解决方案 »

  1.   

    void CMainFrame::OnSet() { 
    ((CView *)GetActiveView())->InvalidateRect(NULL); //加一句立即刷新窗口
          ((CView *)GetActiveView())->UpdateWindow(); 

      

  2.   

    或者利用文档类的刷新:
    void CMainFrame::OnSet() { 
    CDocument* pDoc =((CView*)GetActiveView())->GetDocument();
    ASSERT_VALID(pDoc);
    pDoc->UpdateAllViews(NULL);
    }
      

  3.   

    可以将指针强制转换成你的视图类的指针,然后调用invalidate函数
      

  4.   

    比如说你的视图类的名称是CMyView.那么可以写为:void CMainFrame::OnSet() { 
          ((CMyView *)GetActiveView())->Invalidate();