//
#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));
}
//效果图