我有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;
}
}
但是子窗口显示一秒钟(至少在我的机器上(,然后它们消失了。我使用spy++检查了一下,有一些窗口是我的主窗口的子窗口,但它们没有显示。我找不到任何确凿的理由让它抹去它们。
如果你花时间帮助,谢谢
您可以通过SetClassLong
函数修改背景颜色,而无需处理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;
}
}
}