C++ 最小化窗口时,客户端区域变为黑色

C++ 最小化窗口时,客户端区域变为黑色,c++,mfc,C++,Mfc,我使用MFC创建了一个类似Paint的应用程序。我的程序有一个问题,当我最小化它并再次最大化时,所有的客户端区域都变成黑色,客户端区域上的每个形状或图片都被擦除。我不知道为什么以及如何处理这个错误,我在OnPaint Function中绘制了所有的东西。我需要一些帮助。谢谢大家! 编辑:我的OnPaint的一部分: else if(state == 2 && openPen == 1) { CClientDC dc(this); CRgn ellipse;

我使用MFC创建了一个类似Paint的应用程序。我的程序有一个问题,当我最小化它并再次最大化时,所有的客户端区域都变成黑色,客户端区域上的每个形状或图片都被擦除。我不知道为什么以及如何处理这个错误,我在OnPaint Function中绘制了所有的东西。我需要一些帮助。谢谢大家! 编辑:我的OnPaint的一部分:

else if(state == 2 && openPen == 1)
{
    CClientDC dc(this);
    CRgn ellipse;
    ellipse.CreateEllipticRgn(pPen.x, pPen.y, pPen.x + 5, pPen.y + 5);
    myBrush.CreateStockObject(BLACK_BRUSH);
    CBrush* oldBrush =  (CBrush*)dc.SelectObject(&myBrush);
    dc.FillRgn(&ellipse, &myBrush);
    dc.SelectObject(oldBrush);
    myBrush.DeleteObject();
}

state和openPen是标志,它们表示用户选择Pen选项。

OnPaint函数必须使用CPaintDC,而不是CClientDC。CPaintDC构造函数和析构函数对无效区域执行必要的验证。

显示一些代码。如果将窗口拖出屏幕,然后再拖回屏幕,会发生什么情况?窗户重新刷好了吗?我是MFC新手。我只使用一些函数,如:填充、矩形。。。当我最小化窗口时,state和openPen标志仍然是2和1,那么为什么客户端区域变成黑色呢?你能帮我吗?非常感谢。回答我的问题:如果你把窗口拖出屏幕,然后再拖回屏幕,会发生什么?窗口重新喷漆是否正确?Michael,如果我将窗口从屏幕中拖出来,然后再拖回来,客户端将变暗,一些按钮不在原来的位置。谢谢你的回答。我已将CClientDC更改为CPaintDC,但问题仍然存在。@PhùngKhánhiên发布您的OnPaint函数。对不起,Michael Walz,我已脱机很长时间。我在这里的所有功能: