以下是我在界面上画两条粗细不同的线,我声明了两个不同的CPen对象,能不能用一个CPen对象搞定?(因为这样如果我需要画N条不同粗细的线就要声明N个CPen对象,太麻烦了)CPen Newpen(PS_SOLID,3,RGB(0,0,255));
CPen *Oldpen;
Oldpen=pDC->SelectObject(&Newpen);
pDC->MoveTo(115,0);
pDC->LineTo(115,195);
pDC->LineTo(780,195);CPen l_pen(PS_SOLID,4,RGB(255,122,0));
pDC->SelectObject(l_pen);
pDC->MoveTo(210,460);
pDC->LineTo(560,460);pDC->SelectObject(Oldpen);

解决方案 »

  1.   

    用CreatePen。
    CPen m_pen;
    m_pen.CreatePen( PS_SOLID, 1, 0xFF00FF );
    ....
    m_pen.CreatePen( PS_SOLID, 2, 0xFF00FF );
    ....
      

  2.   

    LendyZhang(Lendy)老大,你这样干肯定不行,一个对象怎么能创建两次呢
      

  3.   

    CPen Newpen(PS_SOLID,3,RGB(0,0,255));
    CPen *Oldpen;
    Oldpen=pDC->SelectObject(&Newpen);
    pDC->MoveTo(115,0);
    pDC->LineTo(115,195);
    pDC->LineTo(780,195);pDC->SelectObject(Oldpen);
    Newpen.DeleteObject();
    Newpen.Create(PS_SOLID,4,RGB(255,122,0));Oldpen = pDC->SelectObject(&Newpen);
    pDC->MoveTo(210,460);
    pDC->LineTo(560,460);pDC->SelectObject(Oldpen);
      

  4.   

    我的意思是可以定义一个CPen,然后多次使用CreatePen来创建。
    其余的操作我就都省略了,楼主应可以自己完成。完整的----------
    CPen pen, *oldpen;pen.CreatePen( PS_SOLID, 3, RGB(0,0,255) );
    oldpen = pDC->SelectObject( &pen );pDC->MoveTo( 115, 0 );
    pDC->LineTo( 115, 195 );
    pDC->LineTo( 780, 195 );pDC->SelectObject( oldpen );
    pen.DeleteObject();pen.CreatePen( PS_SOLID, 4, RGB(255,122,0 ) );
    oldpen = pDC->SelectObject( &pen );pDC->MoveTo(210,460);
    pDC->LineTo(560,460);pDC->SelectObject( oldpen );
    pen.DeleteObject();
      

  5.   

    csdn_cht(欣欣兽) 
    Newpen.DeleteObject();   Newpen.Create(PS_SOLID,4,RGB(255,122,0));
    这个对象已经删除了,怎么还可以创建呢?应该会报错把。
      

  6.   

    csdn_cht(欣欣兽) 是对的,你必须释放掉原来的,再重新创建新的,不然会出错,CPen不支持重新定义属性,必须通过创建得到。
    另:对象删除表示对象的属性没有了,不代表这个对象的空间不存在,你可以重新定义他,也就是重新create。如果你连续为一个CPen的实例创建,创建过程中就会发现当前句柄不为空,表明这是个存在的笔,从而再次创建失败。因此必须先deleteobject.