繁体   English   中英

没有窗口的Win32设备上下文

[英]Win32 Device Context without Window

在我的应用程序中,我需要创建我呈现的HBITMAP对象以及从中复制结果的位置。

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

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

您可以使用CreateDC获取显示:

 HDC hDc = CreateDC(L"DISPLAY", NULL, NULL, NULL);

使用DeleteDC()进行清理。 它仅用于初始化具有索引格式的位图调色板。 如果您不使用这样的格式,NULL可能会起作用,从未尝试过。

然后是GDI +, #include <gdiplus.h>和Bitmap类......

试试这个。 有效。

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 ); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM