我知道MFC中用CPen可以改笔的宽度和线形,再调用库里的图形函数可以。但我是用SetPixel函数自己重新实现的直线,圆,椭圆函数。用CPen改了宽度和线形后,再调用我自己定义的图形函数,线宽什么的还是没变啊。该怎么做,才可以在调用自己的图形函数情况下改线宽和线形。 本人新手 ,求指教。MFC图形

解决方案 »

  1.   

           void CPaintTabView::Line()
    {
    CDC *pDC;
    pDC=GetDC();
        CPen pen(PS_SOLID,10, m_clr);
    CPen *OldPen=pDC->SelectObject(&pen);
        
        int x1 = m_bOrigin.x,y1 = m_bOrigin.y,x2 = m_bFinish.x,y2 = m_bFinish.y,c =m_clr;
    int i,s1,s2,interchange;
    float x,y,deltax,deltay,f,temp;
    x=x1;
    y=y1;
    deltax=abs(x2-x1);
    deltay=abs(y2-y1);
    if (x2-x1>=0) s1=1;else s1=-1;
    if (y2-y1>=0) s2=1;else s2=-1;
    if (deltay>deltax)
    {
    temp = deltax;
    deltax = deltay;
    deltay = temp;
    interchange = 1;
    }
    else interchange = 0;
    f = 2*deltay-deltax;
    pDC->SetPixel(x,y,c);
    for(i=1;i<=deltax;i++)
    {
    if (f>=0)
    {
    if (interchange==1) x+=s1;
    else y+=s2;
    pDC->SetPixel(x,y,c);
    f=f-2*deltax+2*deltay;
    }
    else
    {
    if (interchange==1) y+=s2;
    else x+=s1;
    pDC->SetPixel(x,y,c);
    f=f+2*deltay;
    }
    }
    ReleaseDC(pDC);
    }
      

  2.   

    光见你设置SetPixel,没见你画啊 LineTo()  
    而且函数结束也没有将老画笔选回DC
      

  3.   

    http://msdn.microsoft.com/zh-tw/library/021s1051(v=VS.100).aspxhttp://msdn.microsoft.com/zh-cn/aa294006
    http://msdn.microsoft.com/zh-tw/library/kchtckce(v=VS.80).aspx
      

  4.   

    SetPixel与笔宽没有关系,它不使用画笔,不信你不使用画笔试试。
    它是操作像素的,一个像素你听说过有多宽吗?
    这种叫做栅格操作。
      

  5.   

    当然了,还是要lineto最方便。lineto也是可以画一个点的(你需要的这种点)。