使用演算法實現線寬不為1的 Dash Line

來源:互聯網
上載者:User

//

#include <math.h>void DrawDashLine(CDC* pDC, LPPOINT ptStart, LPPOINT ptEnd,                  int nWidht, COLORREF crLine){  CPen pen(PS_DASH, nWidht, crLine);  CPen *pOldPen = pDC->SelectObject(&pen);    double k = (double)(ptEnd->y - ptStart->y)/(double)(ptEnd->x - ptStart->x);  double b = ptEnd->y - k * ptEnd->x;   double fAngle = atan(k);  int dashLinLen = 10; //  double ptDash_x = dashLinLen * cos(fAngle),  ptDash_y = dashLinLen * sin(fAngle);  double ptSpace_x = ptDash_x, ptSpace_y = ptDash_y;  double pt1_x = ptStart->x, pt1_y = ptStart->y;  while(pt1_x < ptEnd->x)  {    pDC->MoveTo((int)pt1_x, (int)pt1_y);    double pt2_x = pt1_x + ptDash_x, pt2_y = pt1_y + ptDash_y;    if(pt2_x > ptEnd->x)    {      pt2_x = ptEnd->x, pt2_y = ptEnd->y;    }    pDC->LineTo((int)pt2_x, (int)pt2_y);    pt1_x += ptDash_x + ptSpace_x;    pt1_y += ptDash_y + ptSpace_y;  }  pDC->SelectObject(pOldPen);}

 

//測試代碼void CSDI_44View::OnDraw(CDC* pDC){  CSDI_44Doc* pDoc = GetDocument();  ASSERT_VALID(pDoc);  // TODO: add draw code for native data here  CRect rcClient;  GetClientRect(&rcClient);  DrawDashLine(pDC, &rcClient.TopLeft(),     &rcClient.BottomRight(),     5, RGB(255, 0, 0));}

//

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.