C++ 主窗口内的Childwindow显示一秒钟,然后消失

C++ 主窗口内的Childwindow显示一秒钟,然后消失,c++,winapi,C++,Winapi,我有一个MainWindow实例,里面我想创建一堆子窗口,它们是我用来创建GemWindow类的实例 for (unsigned int i = 0; i < win.GetcGem(); i++) { for (unsigned int j = 0; j < win.GetcGem(); j++) { if (!win.Gems[i][j].Create(L"gem", WS_CHILDWI

我有一个MainWindow实例,里面我想创建一堆子窗口,它们是我用来创建GemWindow类的实例

    for (unsigned int i = 0; i < win.GetcGem(); i++)
    {
        for (unsigned int j = 0; j < win.GetcGem(); j++)
        {
            if (!win.Gems[i][j].Create(L"gem", WS_CHILDWINDOW | WS_VISIBLE, NULL, 0, 0, 80, 80, win.Window(), NULL))
                return 0;
        }
    }
for(unsigned int i=0;i
但是子窗口显示了一秒钟(至少在我的机器上),然后消失了。我用spy++检查了一下,有一些窗口是我主窗口的子窗口,但它们没有显示出来。 我找不到任何确凿的理由来抹掉它们


感谢您花时间提供帮助

您可以通过该功能修改背景色,而无需处理
WM_PAINT
消息

只需将代码修改为:

for (unsigned int i = 0; i < GetcGem(); i++)
{
    for (unsigned int j = 0; j < GetcGem(); j++)
    {
        if (Gems[i][j].Create(L"gem", WS_CHILD | WS_VISIBLE, NULL, 5 + i * GetsGem().cx + i * 5, 5 + j * GetsGem().cy + j * 5, GetsGem().cx, GetsGem().cy, Window(), NULL))
        {
            HBRUSH hbrush = CreateSolidBrush(0X7d7d7d);//rgb hexadecimal
            HBRUSH hOldBrush = (HBRUSH)SetClassLongPtr(Gems[i][j].Window(), GCLP_HBRBACKGROUND, (LONG_PTR)hbrush);
            DeleteObject(hOldBrush);
            InvalidateRect(Gems[i][j].Window(), NULL, 1);
        }
        else
        {
            return FALSE;
        }
    }
    
}
for(无符号int i=0;i
您可以将它们彼此重叠创建。这是故意的吗?@CherryDT是的,我这样做是为了测试使用窗口样式创建的父窗口?无论哪种方式,这个问题都不能用提供的信息来回答。请出示一张照片。孩子们的窗户显示得很好。他们只是碰巧和父母有相同的颜色。您希望看到什么?绘制是响应
WM_PAINT
消息完成的。解释系统如何工作。