1

私はmfcdllでビットマップを作成しようとしています、そして私は書いています

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アプリケーションでは正しく機能しますが、コンソールアプリケーションでは機能させることができませんが、コンソールアプリケーションでデバイス接続を取得するにはどうすればよいですか?getDCを動作させることができません

4

2 に答える 2

1

GetDC()を呼び出す前に、CWndのハンドルまたはポイントが必要ですが、コンソールアプリケーションでは、これを呼び出すことはできません。

于 2012-11-28T08:46:51.747 に答える
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>

それが役に立てば幸い、

ハビエル

于 2012-11-29T09:13:05.590 に答える