2012-11-28 41 views
1

我試圖創建MFC DLL位圖,我書面方式寫作位圖

CDC *pDC = GetDC(); 
CDC memDC ; 
memDC.CreateCompatibleDC(pDC); 
CBitmap newbmp; 
newbmp.CreateCompatibleBitmap(pDC, 300, 300); 
ReleaseDC(pDC); 
CBitmap *pOldBitmap = memDC.SelectObject(&newbmp); 
memDC.FillSolidRect(0,0,300,300,RGB(255,255,255)); 
CBrush brush; 
CBrush *pOldBrush = memDC.SelectObject(&brush); 
memDC.Rectangle(10, 10, 80, 80); 
memDC.Ellipse(60,60,220,220); 
memDC.SelectObject(pOldBrush); 
memDC.SelectObject(pOldBitmap); 
CImage img; 
img.Attach((HBITMAP)newbmp.Detach()); 
img.Save(_T("C:\\atest.bmp"),Gdiplus::ImageFormatBMP); 

雖然這正常工作的Cwindows應用程序,我不能讓它工作在一個控制檯應用程序怎麼能我在控制檯應用程序中獲得設備conext? 我不能讓GETDC工作

+0

你使用'GetDC()'時會出錯嗎?如果是這樣,什麼?使用在WinUser中定義的GetDc(HWIND)的 –

+0

返回HDC *,它不能在memDC.CreateCompatibleDC中使用,因爲這期望* CDC –

回答

0

這個工作對我來說:

CDC *pDC; 
    pDC = CDC::FromHandle(::GetDC(NULL)); 

    CDC memDC; 
    memDC.CreateCompatibleDC(pDC); 

    CBitmap newbmp; 
    newbmp.CreateCompatibleBitmap(pDC, 300, 300); 
    CBitmap *pOldBitmap = memDC.SelectObject(&newbmp); 

    memDC.FillSolidRect(0,0,300,300,RGB(255,255,255)); 
    CBrush brush; 
    CBrush *pOldBrush = memDC.SelectObject(&brush); 
    memDC.Rectangle(10, 10, 80, 80); 
    memDC.Ellipse(60,60,220,220); 
    memDC.SelectObject(pOldBrush); 
    memDC.SelectObject(pOldBitmap); 

    CImage img; 
    img.Attach((HBITMAP)newbmp.Detach()); 
    img.Save(_T("C:\\atest.bmp"),Gdiplus::ImageFormatBMP); 

    ::ReleaseDC( NULL, 
        *pDC); 
    ::ReleaseDC( NULL, 
        memDC); 

過程中使用CDC和的CBitmap你需要使用MFC的共享DLL和一些頭添加到stdafx.h中作者:

#include <afxwin.h> 
#include <atlimage.h> 

希望它有幫助,

哈維爾

1

致電前的GetDC(),你必須有CWnd.But的手柄或點在一個控制檯應用程序,你可以不叫這個。

+1

因此如何在控制檯應用程序中創建設備上下文? –

+0

如果您將NULL傳遞給GetDC(),則您將在整個屏幕上顯示一個DC。 – patriiice