2010-08-01 2 views
3

내 응용 프로그램에서는 렌더링 할 HBITMAP 개체를 만들고 거기에서 결과를 복사해야합니다.Window가없는 Win32 장치 컨텍스트

"CreateDIBSection"함수를 사용하여이 비트 맵을 만들었지 만이 함수는 첫 번째 매개 변수로 DC (Device Context)를 필요로했습니다. 현재 GetWindow (hWnd)를 GetWindow (hWnd)를 호출하여 얻을 수 있습니다. 하지만 나는 어떤 종류의 메모리를 사용하지 않고도 어플리케이션 윈도우를 가질 필요없이 HBITMAPS를 생성하고 싶습니다. 가능합니까?

답변

2

CreateCompatibleDC(NULL)은 화면과 호환되는 장치 컨텍스트를 생성합니다. 상황에 이상적이라고 생각되는 것처럼 들립니다.

2

당신은 표시 CreateDC 하나를 얻을 수 있습니다 :

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

정리를 DeleteDC()로. 이것은 인덱스 형식의 비트 맵 팔레트를 초기화하는 데에만 사용됩니다. 이러한 형식을 사용하지 않으면 NULL이 작동하고 시도하지는 않을 수도 있습니다. 이 시도

그런 다음 GDI +, #include <gdiplus.h> 및 비트 맵 클래스 ...

+0

사용자가 여러 개의 디스플레이를 사용하면 이러한 문제가 발생합니까? –

+0

팔레트에만 영향을 미칩니다. 8bpp 모드에서 * long * 동안 실행할 수있는 비디오 어댑터를 보지 못했습니다. 좋은 속임수. –

0

이 있습니다. 그것은 효과가 있었다.

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