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