+ -
当前位置:首页 → 问答吧 → 双缓存画图画笔颜色不能修改,默认是黑色

双缓存画图画笔颜色不能修改,默认是黑色

时间:2011-11-29

来源:互联网

C/C++ code

CRect Thumb_Rect;      //创建作图控件区域
    CDC* Thumb_pDC,;        //创建作图句柄
    CDC* Thumb_pDCB,;   //创建背景句柄
    CDC Thumb_memDC,;   //创建内存作图句柄
    CBitmap Thumb_memBitmap;  //创建内存作图位图区域
    CBitmap* Thumb_pOldBmp;       //备份内存作图位图区域
    CBrush Thumb_Brush(RGB(88,166,211)); //创建红色画刷
    CBrush* Thumb_OldBrush;   //备份画刷
    CPen Thumb_Pen(PS_SOLID | PS_ENDCAP_SQUARE,1,RGB(255,255,255));  //创建黑色直线画笔
    CPen* Thumb_OldPen;   //备份画笔
    CPen* Thumb_OldPenB;  //创建空边框背景色画笔
    
    CWnd* Thumb_pWnd = GetDlgItem(IDC_THUMB);                            //获取大拇指作图控件句柄
    
    
    Thumb_pWnd->GetClientRect(&Thumb_Rect);                               //将大拇指句柄指向控件区域赋于变量

    
    
    Thumb_pDC = Thumb_pWnd->GetDC();                                      //获取大拇指DC句柄
    
    
    Thumb_pDCB = Thumb_pWnd->GetDC();
    
    
    Thumb_memDC.CreateCompatibleDC(Thumb_pDC);    
    
    
    
    Thumb_memBitmap.CreateCompatibleBitmap(Thumb_pDC,Thumb_Rect.Width(),Thumb_Rect.Height());    
    Thumb_pOldBmp = Thumb_memDC.SelectObject(&Thumb_memBitmap);
    Thumb_OldBrush = Thumb_pDCB->SelectObject(&Thumb_Brush);
    
    Thumb_OldPen = Thumb_memDC.SelectObject(&Thumb_Pen);
    
    
    Thumb_OldPenB = (CPen*)(Thumb_pDCB->SelectStockObject(NULL_PEN));   //手指创建背景无边框画笔
    
    
    Thumb_memDC.MoveTo(0,((int)(Lhand.Dg->f[0])*Thumb_Rect.Height())/100);
    Thumb_memDC.LineTo(Thumb_Rect.Width(),((int)(Lhand.Dg->f[0])*Thumb_Rect.Height())/100);    
    Thumb_pDCB->Rectangle(0,(Thumb_Min*Thumb_Rect.Height())/100-3,Thumb_Rect.Width(),(Thumb_Max*Thumb_Rect.Height())/100+3);
    Thumb_pDC->BitBlt(0,((int)(Lhand.Dg->f[0])*Thumb_Rect.Height())/100-2,Thumb_Rect.Width()-1,3,&Thumb_memDC,0,0,SRCCOPY);
            }  
            Thumb_pDCB->SelectObject(Thumb_OldBrush);
            Thumb_pDCB->SelectObject(Thumb_OldPenB);
            Thumb_memDC.SelectObject(Thumb_Pen);
            Thumb_memBitmap.DeleteObject();
            Thumb_memDC.DeleteDC();
        }


我想用这种方法画出一条有颜色的线在走动,但是它一直都是黑色的默认色

作者: g6785654   发布时间: 2011-11-29

我把这句 CPen Thumb_Pen(PS_SOLID | PS_ENDCAP_SQUARE,1,RGB(255,255,255)); //创建黑色直线画笔
改成 CPen Thumb_Pen(PS_SOLID | PS_ENDCAP_SQUARE,1,RGB(255,0,0)); //创建红色直线画笔

这样以后,还是黑色的

作者: g6785654   发布时间: 2011-11-29

引用 1 楼 g6785654 的回复:
我把这句 CPen Thumb_Pen(PS_SOLID | PS_ENDCAP_SQUARE,1,RGB(255,255,255)); //创建黑色直线画笔
改成 CPen Thumb_Pen(PS_SOLID | PS_ENDCAP_SQUARE,1,RGB(255,0,0)); //创建红色直线画笔

这样以后,还是黑色的

不会,我还特意在我的机器上跑一遍.
我测试结果均OK.

作者: yuucyf   发布时间: 2011-11-29

引用 2 楼 yuucyf 的回复:
引用 1 楼 g6785654 的回复:
我把这句 CPen Thumb_Pen(PS_SOLID | PS_ENDCAP_SQUARE,1,RGB(255,255,255)); //创建黑色直线画笔
改成 CPen Thumb_Pen(PS_SOLID | PS_ENDCAP_SQUARE,1,RGB(255,0,0)); //创建红色直线画笔

这样以后,还是黑色的

不会,我还特……

yuucyf,你测试的结果是黄色的么

作者: g6785654   发布时间: 2011-11-29

引用 2 楼 yuucyf 的回复:
引用 1 楼 g6785654 的回复:
我把这句 CPen Thumb_Pen(PS_SOLID | PS_ENDCAP_SQUARE,1,RGB(255,255,255)); //创建黑色直线画笔
改成 CPen Thumb_Pen(PS_SOLID | PS_ENDCAP_SQUARE,1,RGB(255,0,0)); //创建红色直线画笔

这样以后,还是黑色的

不会,我还特……

不是,说错了,你那运行后颜色变了?奇怪,可是在我这都是黑色的

作者: g6785654   发布时间: 2011-11-29

我用这段代码就画一根线
C/C++ code

    CRect Thumb_Rect;      //创建作图控件区域
    CDC* Thumb_pDC;        //创建作图句柄
    CDC* Thumb_pDCB;   //创建背景句柄
    CDC Thumb_memDC;   //创建内存作图句柄
    CBitmap Thumb_memBitmap;  //创建内存作图位图区域
    CBitmap* Thumb_pOldBmp;       //备份内存作图位图区域
    CBrush Thumb_Brush(RGB(88,166,211)); //创建红色画刷
    CBrush* Thumb_OldBrush;   //备份画刷
    CPen Thumb_Pen(PS_SOLID | PS_ENDCAP_SQUARE,1,RGB(255,0,0));  //创建黑色直线画笔
    CPen* Thumb_OldPen;   //备份画笔
    CPen* Thumb_OldPenB;  //创建空边框背景色画笔
    
    CWnd* Thumb_pWnd = GetDlgItem(IDC_THUMB);                            //获取大拇指作图控件句柄
    
    
    Thumb_pWnd->GetClientRect(&Thumb_Rect);                               //将大拇指句柄指向控件区域赋于变量
    
    
    
    Thumb_pDC = Thumb_pWnd->GetDC();                                      //获取大拇指DC句柄
    
    
    Thumb_pDCB = Thumb_pWnd->GetDC();
    
    
    Thumb_memDC.CreateCompatibleDC(Thumb_pDC);    
    
    
    
    Thumb_memBitmap.CreateCompatibleBitmap(Thumb_pDC,Thumb_Rect.Width(),Thumb_Rect.Height());    
    Thumb_pOldBmp = Thumb_memDC.SelectObject(&Thumb_memBitmap);
    Thumb_OldBrush = Thumb_pDCB->SelectObject(&Thumb_Brush);
    
    Thumb_OldPen = Thumb_memDC.SelectObject(&Thumb_Pen);
    
    
    Thumb_OldPenB = (CPen*)(Thumb_pDCB->SelectStockObject(NULL_PEN));   //手指创建背景无边框画笔
    
    
    Thumb_memDC.MoveTo(0,50);
    Thumb_memDC.LineTo(Thumb_Rect.Width(),50);    
//    Thumb_pDCB->Rectangle(0,(Thumb_Min*Thumb_Rect.Height())/100-3,Thumb_Rect.Width(),(Thumb_Max*Thumb_Rect.Height())/100+3);
    Thumb_pDC->BitBlt(0,50-2,Thumb_Rect.Width()-1,3,&Thumb_memDC,0,0,SRCCOPY);
    
    Thumb_pDCB->SelectObject(Thumb_OldBrush);
    Thumb_pDCB->SelectObject(Thumb_OldPenB);
    Thumb_memDC.SelectObject(Thumb_Pen);
    Thumb_memBitmap.DeleteObject();
    Thumb_memDC.DeleteDC();
    


大伙可以试下,效果如下,颜色没有改变的啊

作者: g6785654   发布时间: 2011-11-29

我测试过程中指定Pen为什么颜色,画出来就是什么颜色.

作者: yuucyf   发布时间: 2011-11-29

检查下函数 Thumb_pDC->BitBlt(0,50-2,Thumb_Rect.Width()-1,3,&Thumb_memDC,0,0,SRCCOPY);
看看坐标是否正确.

作者: gameslq   发布时间: 2011-11-29

看不出有什么问题!换一台机器试试!

作者: fandh   发布时间: 2011-11-29

我找到原因了,Thumb_pDC->BitBlt(0,50-2,Thumb_Rect.Width()-1,3,&Thumb_memDC,0,0,SRCCOPY);应该改成Thumb_pDC->BitBlt(0,0,Thumb_Rect.Width(),Thumb_Rect.Height(),&Thumb_memDC,0,0,SRCCOPY);
我没有把内存图全部贴出来,只贴了部分,所以一直是黑色的,现在还请各位帮我个忙,我的内存图一直是黑色的,我的用画刷刷新它,怎么弄

作者: g6785654   发布时间: 2011-11-29