我的技术规范

C/C++, Algorithm
随笔 - 11, 文章 - 7, 评论 - 1, 引用 - 0
数据加载中……

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 );
}

posted on 2012-03-29 19:54 panchao 阅读(422) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理