为什么画笔颜色设置无效,总是黑色?
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);

解决方案 »

  1.   

    CPen pen.CreatePen(PS_SOLID,1,RGB(255,0,0)); -->
    CPen pen;
    pen.CreatePen(PS_SOLID,1,RGB(255,0,0)); 
    CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//取得空心刷子的指针  
    CBrush *poldBrush = pDC->SelectObject(pBrush); //选入空心刷子
    把他们注释掉 
      

  2.   

    CPen pen(PS_SOLID,1,RGB(255,0,0));
      

  3.   

    CPen pen(PS_SOLID,1,RGB(255,0,0));
      

  4.   

      是把 
          CPen pen.CreatePen(PS_SOLID,1,RGB(255,0,0)); 
      换成
          CPen pen(PS_SOLID,1,RGB(255,0,0));吗?
      我试了,没效果?
      不太明白二楼的,不过我也注释掉试了一下,也没效果,还是很黑?
      天灵灵,地灵灵,各路神仙快显灵啦!!!
      
      

  5.   

    我刚测试了你的代码,没有问题的啊。
    显示的是红色的边框线我使用的是单文档,在OnDraw函数中使用你的代码。
      

  6.   

    vc版本是6.0  操作系统xp新建一个单文档程序,然后在OnDraw函数中调用你的代码。
      

  7.   

    同意雪影
    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
    }
      

  8.   

    // MemDC.cpp: implementation of the CMemDC class.
    //
    //////////////////////////////////////////////////////////////////////#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;
    }
      

  9.   

    // MemDC.h: interface for the CMemDC class.
    //
    //////////////////////////////////////////////////////////////////////#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_)
      

  10.   

    pLayer->Draw(pDC);
    在pLayer->Draw(pDC)里面用CMemDC
                  
      

  11.   

    改成这样的话颜色是正确的,不过mousemove时屏幕一直在闪烁。且停止mousemove后图形就不见了,估计又变成白色了。还是解决不了。
      

  12.   

    这个问题的源码所在页面:http://download.csdn.net/source/1608356
      

  13.   

    http://download.csdn.net/source/1608356