簡體   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