Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+中写入位图+;控制台应用程序_C++_Mfc - Fatal编程技术网

C++ 在c+中写入位图+;控制台应用程序

C++ 在c+中写入位图+;控制台应用程序,c++,mfc,C++,Mfc,我正在尝试在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,

我正在尝试在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应用程序中正常工作,但我无法使其在控制台应用程序中正常工作。如何在控制台应用程序中获取设备上下文? 我无法让getDC工作

在调用getDC()之前,您必须具有CWnd的句柄或点。但在控制台应用程序中,您不能调用此句柄或点

在调用GetDC()之前,必须有CWnd的句柄或点。但在控制台应用程序中,不能调用此句柄或点

这对我很有用:

    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>
#包括
#包括
希望有帮助

哈维尔

这对我很有用:

    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>
#包括
#包括
希望有帮助


Javier

使用
GetDC()
时是否出现错误?如果是,那又怎样?使用WinUser中定义的GetDc(HWIND)返回的HDC*无法在memDC.CreateCompatibleDC中使用,因为这需要一个*cdc。使用
GetDc()
时是否会出错?如果是,怎么办?使用WinUser中定义的GetDc(HWIND)返回的HDC*无法在memDC.CreateCompatibleDC中使用,因为这需要一个*cdc。那么我如何在控制台应用程序中创建设备上下文?如果将NULL传递给GetDc(),整个屏幕都有一个DC。那么如何在控制台应用程序中创建设备上下文呢?如果将NULL传递给GetDC(),整个屏幕都会有一个DC。