画粗实线时
放大后发现
直线的端点是圆头的
怎样使之为绝对方形的端点呢?

解决方案 »

  1.   

    PS_ENDCAP_ROUND 结束处为圆形
    PS_ENDCAP_SQUARE 结束处为方形画笔的风格或上PS_ENDCAP_SQUARE 结束处为方形
      

  2.   

    LOGBRUSH lb;
    lb.lbStyle=BS_SOLID;
    lb.lbColor=RGB(0,255,0);
    CPen pen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_SQUARE|PS_JOIN_BEVEL,4,&lb);
    CPen *old=pDC->SelectObject(&pen);
    pDC->BeginPath();
    pDC->MoveTo(300,300);
    pDC->LineTo(400,400);
    pDC->CloseFigure();
    pDC->EndPath();
    pDC->StrokePath();
    pDC->SelectObject(old);
    pen.DeleteObject();
      

  3.   

    我试了一下,你的要求估计要用
    PS_ENDCAP_FLAT
      

  4.   

    其实我的本意是利用粗实线画矩形将下列代码加入到OnDraw中:
    pDC->SetMapMode(MM_HIMETRIC);
    pDC->SetWindowOrg(-10000,10000);

    LOGBRUSH lb;
    lb.lbStyle=BS_SOLID;
    lb.lbColor=RGB(0,255,0);
    CPen pen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_SQUARE|PS_JOIN_BEVEL,400,&lb);
    CPen *old=pDC->SelectObject(&pen);
    pDC->BeginPath();
    pDC->MoveTo(100,100);
    pDC->LineTo(100,5000);
    pDC->LineTo(5000,5000);
    pDC->EndPath();
    pDC->StrokePath();
    pDC->SelectObject(old);
    pen.DeleteObject();发现矩形的外轮廓仍旧不是直角的
      

  5.   

    //pDC->BeginPath();
    pDC->MoveTo(100,100);
    pDC->LineTo(100,5000);
    pDC->LineTo(5000,5000);
    //pDC->EndPath();
    //pDC->StrokePath();
      

  6.   


    果真好用但是如果用pDC->Polygon画封闭的多边形就不好用了 pDC->SetMapMode(MM_HIMETRIC);
    pDC->SetWindowOrg(-10000,10000);

    LOGBRUSH lb;
    lb.lbStyle=BS_SOLID;
    lb.lbColor=RGB(0,255,0);
    CPen pen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_SQUARE|PS_JOIN_BEVEL/*|PS_ENDCAP_FLAT*/,400,&lb);
    CPen *old=pDC->SelectObject(&pen);
    pDC->MoveTo(100,100);
    pDC->LineTo(100,5000);
    pDC->LineTo(5000,5000); CPoint pts[4];
    pts[0].x=800;
    pts[0].y=100;
    pts[1].x=800;
    pts[1].y=4000;
    pts[2].x=4000;
    pts[2].y=4000;
    pts[3].x=4000;
    pts[3].y=100;

    pDC->Polygon(pts, 4);

    pDC->SelectObject(old);
    pen.DeleteObject();
      

  7.   

    是的
    我是想问一下Polygon画出的边不是直角
    应该怎么处理呢?
      

  8.   

    LOGBRUSH lb;
    lb.lbStyle=BS_SOLID;
    lb.lbColor=RGB(0,255,0);
    CPen pen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_SQUARE|PS_JOIN_BEVEL,300,&lb);
    CPen *old=pDC->SelectObject(&pen);
    float fOut;
    CPoint pt[5];
    pt[0].x = 100;
    pt[0].y = 100; pt[1].x = 800;
    pt[1].y = 100;

    pt[2].x = 800;
    pt[2].y = 500; pt[3].x = 100;
    pt[3].y = 800; pt[4].x = 100;
    pt[4].y = 100; pDC->Polygon(pt,5);
    pDC->SelectObject(old); 没问题的,边角都是直角,你在好好看看你的
      

  9.   

    LOGBRUSH lb;
    lb.lbStyle=BS_SOLID;
    lb.lbColor=RGB(0,255,0);
    CPen pen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_SQUARE|PS_JOIN_BEVEL,300,&lb);
    CPen *old=pDC->SelectObject(&pen);
    float fOut;
    CPoint pt[5];
    pt[0].x = 100;
    pt[0].y = 100;pt[1].x = 800;
    pt[1].y = 100;pt[2].x = 800;
    pt[2].y = 500;pt[3].x = 100;
    pt[3].y = 800;pt[4].x = 100;
    pt[4].y = 100;pDC->Polygon(pt,5);
    pDC->SelectObject(old);
    画出的外轮廓不是直角啊
      

  10.   

    将CPen 改为如下就可以了
    CPen pen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_SQUARE|PS_JOIN_MITER,400,&lb);