none
关于MFC的一个问题,大家帮忙看一下 RRS feed

  • 问题

  • 我建立了一个 MFC APPWIZARD[EXE]的程序,我执行程序以后,它按照我的要求显示相关的内容,可是我将它最小化(或是将其他界面覆盖在它上面)以后,上面的内容就全部没有了,就像运行了清屏函数一样,只剩下几个控件。

    2008年12月21日 6:26

答案

全部回复

  •  

    它按照我的要求显示相关的内容

     

    不晓得你这个是如何让他显示。

    但是,如果你最小化或是界面切换的话,都会引发WM_PAINT消息调用,就会重绘显示区。

    所以,如果你是做的类似画图板的程序,就会被自动擦除掉。

     

    解决方法:

    你需要记住之前绘制的内容,在OnPaint方法里重新绘制。

    2008年12月21日 8:38
  • 在WM_PAINT消息函数中绘图。

     

    2008年12月22日 6:51
    版主
  • 能够说具体点吗?因为我试了一下,出现了一个都什么错误

    Code Snippet

    void CMyDlg::OnPaint()
    {
     if (IsIconic())
     {
      CPaintDC dc(this); // device context for painting

      SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

      // Center icon in client rectangle
      int cxIcon = GetSystemMetrics(SM_CXICON);
      int cyIcon = GetSystemMetrics(SM_CYICON);
      CRect rect;
      GetClientRect(&rect);
      int x = (rect.Width() - cxIcon + 1) / 2;
      int y = (rect.Height() - cyIcon + 1) / 2;

      // Draw the icon
      dc.DrawIcon(x, y, m_hIcon);
     }
     else
     {
      CDialog::OnPaint();
     }
    }

     

     

    这是本来的函数体 

    我如果要自己写的话是应该从哪里开始写

     

    2008年12月23日 16:34
  • 对了   还请教一下 我变了一个游戏,里面设置了保存这个项目  但是只能将他保存在那个程序所在的文件夹里面,请问怎么实现任意的另存为到其他的文件夹中,听说是要CFileDialog来实现,但具体的怎么搞我还是不会

     

    2008年12月23日 16:38
  • 看看WM_ERASEBKGN消息的处理函数是否是return TRUE,如果是,说明没有擦除背景导致这样,应该调用

    Code Snippet
    return __supper::OnEraseBkgn(pDC);

     

     

    2008年12月24日 3:26
  •  ashi198866 写:

    能够说具体点吗?因为我试了一下,出现了一个都什么错误

    Code Snippet

    void CMyDlg::OnPaint()
    {
     if (IsIconic())
     {
      CPaintDC dc(this); // device context for painting

      SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

      // Center icon in client rectangle
      int cxIcon = GetSystemMetrics(SM_CXICON);
      int cyIcon = GetSystemMetrics(SM_CYICON);
      CRect rect;
      GetClientRect(&rect);
      int x = (rect.Width() - cxIcon + 1) / 2;
      int y = (rect.Height() - cyIcon + 1) / 2;

      // Draw the icon
      dc.DrawIcon(x, y, m_hIcon);
     }
     else
     {
      CDialog::OnPaint();
     }
    }

     

     

    这是本来的函数体 

    我如果要自己写的话是应该从哪里开始写

     

    在// Draw the icon后面加上你要重绘的内容就好啦

    2008年12月25日 7:02
  • 不过一般好像没有直接在Dlg上绘图的。

     

    如果想显示Image的话,用CStatic控件就好了。

    2008年12月25日 7:07