为了进行实验,我想创建许多小窗口。我的意思很多,大约一千左右。
窗口很小,只包含一些标签(AB):
我创建了一百个作为实验,但是它们的显示不是瞬时的,当它们放在屏幕上时可以看到。为什么会这样?
我期望C / C ++程序非常快,所以我根本看不到屏幕上的窗口。这是一个错误的期望吗?还是应该使用某种较轻的窗口类型(我不是Windows程序员,所以我只是在猜测),可以放得更快一些?
这是代码的相关部分:
HWND parent = 0;
for (int i = 0; i < 100; ++i)
{
HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_BORDER,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
if (!hWnd)
{
return FALSE;
}
if (parent == 0)
parent = hWnd;
else
SetWindowLong(hWnd, GWL_HWNDPARENT, (long)parent);
SetWindowLong(hWnd, GWL_STYLE, 0);
SetMenu(hWnd, NULL);
SetWindowPos(hWnd, HWND_TOP, 100 + (i * 20), 100, 20, 20, 0);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
}
...
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code that uses hdc here...
SetBkColor(hdc, RGB(0,255,0));
TextOut(hdc, 1, 1, TEXT("AB"), strlen("AB"));
EndPaint(hWnd, &ps);
}
break;
[SetWindowLong
,SetMenu
,SetWindowPos
和ShowWindow
都可以通过在CreateWindowW
自变量中提供相同的信息来删除。
然后您也可以删除对UpdateWindow
的呼叫。
这里无关紧要的C / C ++速度,而是Win32 API调用,它发送Windows消息。