Почему GetObject возвращает BITMAP с нулевыми bmBits?

Контекст: яЯ пытаюсь сделать снимок экрана с другим окном, чтобы вставить его в OpenCV. В Интернете я нашел некоторый код, который должен быть в состоянии преобразовать BITMAP во что-то, с чем OpenCV может работать. К сожалению, я столкнулся с некоторыми проблемами.

Вопрос: почему атрибут / член bmBits всегда равен нулю? (Я тоже пробовал с PrintWindow вместо BitBlt результат был тот же)

#include 
#include 
#include 

int main(int argc, char* argv[])
{
    std::wstring windowName = L"Calculator";

    RECT rect;
    HWND hwnd = FindWindow(NULL, windowName.c_str());
    if (hwnd == NULL)
    {
        return 0;
    }
    GetClientRect(hwnd, &rect);

    HDC hdcScreen = GetDC(NULL);
    HDC hdc = CreateCompatibleDC(hdcScreen);
    HBITMAP hbmp = CreateCompatibleBitmap(hdcScreen, 
        rect.right - rect.left, rect.bottom - rect.top);
    SelectObject(hdc, hbmp);

    PrintWindow(hwnd, hdc, PW_CLIENTONLY);

    BITMAP bmp;
    GetObject(hbmp, sizeof(BITMAP), &bmp);

    return 0;
}

Ответы на вопрос(4)

Ваш ответ на вопрос