为什么许多窗口的窗口创建速度慢?可以更快吗?

问题描述 投票:0回答:1

为了进行实验,我想创建许多小窗口。我的意思很多,大约一千左右。

窗口很小,只包含一些标签(AB):

enter image description here

我创建了一百个作为实验,但是它们的显示不是瞬时的,当它们放在屏幕上时可以看到。为什么会这样?

我期望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;
c windows winapi window
1个回答
1
投票

[SetWindowLongSetMenuSetWindowPosShowWindow都可以通过在CreateWindowW自变量中提供相同的信息来删除。

然后您也可以删除对UpdateWindow的呼叫。

这里无关紧要的C / C ++速度,而是Win32 API调用,它发送Windows消息。

© www.soinside.com 2019 - 2024. All rights reserved.