CDC坐标系统

CDC坐标系统


void CChildView::OnPaint() 
{
     // 如果是 0 开始的坐标范围选择,可以用 SetViewportOrg ,也可以用 SetWindowOrg
    CPaintDC dc( this);

    RECT rc;
    GetClientRect( &rc);

    pDC->SetMapMode( MM_ANISOTROPIC );

    pDC->SetWindowExt( 10000, 10000 );
    pDC->SetViewportExt( rc.right / 2, - rc.bottom / 2);

    pDC->SetViewportOrg( rc.right / 4, rc.bottom - rc.bottom / 4 );
     // pDC->SetWindowOrg( -5000, 15000 );

    pDC->Rectangle( 0, 0, 10000, 10000 );

    POINT pts[] = {  0, 0,    3000, 2000,  3500, 6000,    7000, 9000 };
    pDC->Polyline( pts,  sizeof(pts) /  sizeof(*pts) ); 

    pDC->SetBkMode( TRANSPARENT );


     for (  int i = 0; i <  sizeof(pts) /  sizeof(*pts) ; ++ i ) 
    {
        TCHAR szText[256];

        pDC->TextOut( pts[i].x, pts[i].y, szText,  
            wsprintf ( szText, L"%d, %d", pts[i].x, pts[i].y ) );
    }

    pDC->TextOut( 10000, 10000, TEXT("1,1"), 3 );
}


void CChildView::OnPaint() 
{
     //  但如果不是从 0 开始,则坐标 必须由 SetWindowOrg 设置

    CPaintDC dc( this);

    RECT rc;
    GetClientRect( &rc);
    dc.Rectangle( rc.right / 4, rc.bottom / 4, rc.right - rc.right / 4, rc.bottom - rc.bottom / 4 );

    dc.SetMapMode( MM_ANISOTROPIC );

    dc.SetWindowExt( 10000, 10000 );
    dc.SetViewportExt( rc.right / 2, - rc.bottom / 2);

     // dc.SetViewportOrg( rc.right / 4, rc.bottom - rc.bottom / 4 );
    dc.SetWindowOrg( -2000, 17000 );

     // dc.Rectangle( 0, 0, 10000, 10000 );

    POINT pts[] = {  0, 0,    3000, 2000,  3500, 6000,    7000, 9000 };
    dc.Polyline( pts,  sizeof(pts) /  sizeof(*pts) ); 

    dc.SetBkMode( TRANSPARENT );


     for (  int i = 0; i <  sizeof(pts) /  sizeof(*pts) ; ++ i ) 
    {
        TCHAR szText[256];

        dc.TextOut( pts[i].x, pts[i].y, szText,  
        wsprintf ( szText, L"%d, %d", pts[i].x, pts[i].y ) );
    }

    dc.TextOut( 10000, 10000, TEXT("1,1"), 3 );
}

你可能感兴趣的:(CDC坐标系统)