C++ 不带窗口的Win32设备上下文

C++ 不带窗口的Win32设备上下文,c++,winapi,C++,Winapi,在我的应用程序中,我需要创建HBITMAP对象,并从中复制结果 我使用函数“CreateDIBSection”来创建这些位图,但是该函数需要一个DC(设备上下文)作为第一个参数。目前,我通过在主windows句柄(hWnd)上调用GetDC(hWnd)来实现这一点。但是我希望能够在不需要应用程序窗口的情况下创建HBITMAPS,而不需要某种内存DC,这是可能的吗?CreateCompatibleDC(NULL)将为您创建一个与屏幕兼容的设备上下文-听起来在这种情况下非常理想。您可以使用Creat

在我的应用程序中,我需要创建HBITMAP对象,并从中复制结果


我使用函数“CreateDIBSection”来创建这些位图,但是该函数需要一个DC(设备上下文)作为第一个参数。目前,我通过在主windows句柄(hWnd)上调用GetDC(hWnd)来实现这一点。但是我希望能够在不需要应用程序窗口的情况下创建HBITMAPS,而不需要某种内存DC,这是可能的吗?

CreateCompatibleDC(NULL)
将为您创建一个与屏幕兼容的设备上下文-听起来在这种情况下非常理想。

您可以使用CreateDC为显示器创建一个上下文:

 HDC hDc = CreateDC(L"DISPLAY", NULL, NULL, NULL);
使用DeleteDC()进行清理。它仅用于初始化索引格式位图的调色板。如果不使用这种格式,NULL可能会起作用,但从未尝试过

还有GDI+,
#include
和位图类…

试试这个。成功了

HDC hdcScreen = ::GetDC( NULL );
HDC hdcMemDC = ::CreateCompatibleDC(hdcScreen); 
HBITMAP hbmScreen = ::CreateCompatibleBitmap(hdcScreen, cx, cy);
HBITMAP hOldBitmap  =  (HBITMAP) ::SelectObject(hdcMemDC, hbmScreen);

    MyImageDraw(hdcMemDC, ...);

    // The drawing image is held in hBitmap. You can save it
HBITMAP hBitmap = (HBITMAP)::SelectObject(hdcMemDC,  hOldBitmap); 

    // save The trend image into c:\test.bmp
    PBITMAPINFO pbi = CreateBitmapInfoStruct(hBitmap);
CreateBMPFile("C:\\Temp\\test.bmp", pbi, hBitmap, hdcMemDC);

    //Clean up
::DeleteObject(hbmScreen);
::DeleteObject(hdcMemDC);
::ReleaseDC( NULL, hdcScreen ); 

如果用户有多个显示器,此选项是否会中断?只会影响调色板。很长一段时间没有看到可以在8bpp模式下运行的视频适配器。很好的解脱。