我写了一个单文档程序。在该程序中我定义了一个全局的CDC*变量p。在该程序中我还定义了菜单A和B。按下它们,发出的消息都是在View中响应。菜单A的消息处理函数的内容只有一句“p=GetDC();”,菜单A的消息处理函数的内容只有一句“(*g_dcp).Rectangle(10,10,50,50);”。我先按菜单A,之后再按菜单B。结果是没有图形画出来。这是为什么?要想画出图来,应怎样办?

解决方案 »

  1.   

    要在OnPaint函数或OnDraw函数中执行的画图操作才能在刷新时保存。
      

  2.   

    这位仁兄,我没有太明白你程序的意图,为什么要定义一个全局的CDC*变量呢? 在函数A中你“p=GetDC();”, 但是GetDC()的返回值是个临时值,不可保存留给该函数之外使用(请参见MSDN:CWnd::GetDC )。另外在B中你画了一个图形,但是你没有刷新你所画的区域(Invalidate() 和 UpdateWindow()),所以自然见不到。
      

  3.   

    我再补充一下,p=GetDC()得到的CDC* 只是一个临时变量,每次都会变;
    一般来说,没有将CDC作全局变量处理;
    如果你想按菜单A画出图形,按菜单B画出另一种图形,就要在各自的消息处理函数中设置全局的标志变量比如m_nflag等等,然后加上一句InvalidateRect,或者干脆Invalidate,而将画图放在OnDraw函数中,根据m_nflag画出不同的图形!