为什么画笔颜色设置无效,总是黑色?
CRect rect;
rect.SetRect(m_Begin,m_End); //创建笔
CPen pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//取得空心刷子的指针
CBrush *poldBrush = pDC->SelectObject(pBrush); //选入空心刷子
CPen *poldPen=pDC->SelectObject(&pen);//选入画笔
int oldBkMode=pDC->SetBkMode(TRANSPARENT);
pDC ->Ellipse(rect); //画椭圆 pDC->SelectObject(poldPen);
pDC->SelectObject(poldBrush);
pDC->SetBkMode(oldBkMode);
pDC->SetROP2(oldBkMode);
CRect rect;
rect.SetRect(m_Begin,m_End); //创建笔
CPen pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//取得空心刷子的指针
CBrush *poldBrush = pDC->SelectObject(pBrush); //选入空心刷子
CPen *poldPen=pDC->SelectObject(&pen);//选入画笔
int oldBkMode=pDC->SetBkMode(TRANSPARENT);
pDC ->Ellipse(rect); //画椭圆 pDC->SelectObject(poldPen);
pDC->SelectObject(poldBrush);
pDC->SetBkMode(oldBkMode);
pDC->SetROP2(oldBkMode);
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//取得空心刷子的指针
CBrush *poldBrush = pDC->SelectObject(pBrush); //选入空心刷子
把他们注释掉
CPen pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
换成
CPen pen(PS_SOLID,1,RGB(255,0,0));吗?
我试了,没效果?
不太明白二楼的,不过我也注释掉试了一下,也没效果,还是很黑?
天灵灵,地灵灵,各路神仙快显灵啦!!!
显示的是红色的边框线我使用的是单文档,在OnDraw函数中使用你的代码。
void CDrawingBoxView::OnDraw(CDC* pDC)
{
CDrawingBoxDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CMemDC dc(pDC);
CRect rect;
GetClientRect(rect);
dc.Create(rect.Width(),rect.Height());
CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
dc.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
POSITION pos = pDoc ->m_list.GetHeadPosition();
while(pos)
{
CShape *pLayer = (CShape*)pDoc->m_list.GetNext(pos);
pLayer->Draw(&dc); //在这里调用了上面的代码
}
pDC ->BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);
// TODO: add draw code for native data here
}
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "MemDC.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////CMemDC::CMemDC(CDC* pDC)
{
CreateCompatibleDC(pDC);
}CMemDC::~CMemDC()
{
// m_bitmap.DeleteObject();
}BOOL CMemDC::Create(int nWidth, int nHeight)
{
if(!m_bitmap.CreateCompatibleBitmap(this,nWidth,nWidth))
return FALSE;
SelectObject(&m_bitmap);
return TRUE;
}BOOL CMemDC::LoadFile(LPCSTR szFile)
{
HBITMAP hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
szFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
m_bitmap.Attach(hBitmap);
SelectObject(&m_bitmap);
return TRUE;
}
BOOL CMemDC::LoadBitmap(UINT nIDResource)
{
m_bitmap.LoadBitmap(nIDResource);
SelectObject(&m_bitmap);
return TRUE;
}int CMemDC::GetWidth()
{
BITMAP bm;
m_bitmap.GetBitmap(&bm);
return bm.bmWidth;
}int CMemDC::GetHeight()
{
BITMAP bm;
m_bitmap.GetBitmap(&bm);
return bm.bmHeight;
}
//
//////////////////////////////////////////////////////////////////////#if !defined(AFX_MEMDC_H__B9C67330_B311_4A9B_9E54_B48259E8ADB6__INCLUDED_)
#define AFX_MEMDC_H__B9C67330_B311_4A9B_9E54_B48259E8ADB6__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000class CMemDC : public CDC
{
public:
CMemDC(CDC* pDC);
BOOL Create(int nWidth, int nHeight);
BOOL LoadBitmap(UINT nIDResource);
BOOL LoadFile(LPCSTR szFile);
int GetWidth();
int GetHeight();
virtual ~CMemDC();
// CDC m_dcMem;
private:
CBitmap m_bitmap;
// CDC *m_pDC;
};#endif // !defined(AFX_MEMDC_H__B9C67330_B311_4A9B_9E54_B48259E8ADB6__INCLUDED_)
在pLayer->Draw(pDC)里面用CMemDC