SetWindowExt & SetViewportExt

本文详细解释了如何通过调用SetMapMode和SetWindowExt函数来调整绘图区域的逻辑坐标系与物理显示区域之间的映射关系,包括如何设置坐标轴单位、方向和伸缩比例。通过实例代码演示了如何获取控件大小,并利用这些函数实现坐标系的灵活调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 调用SetMapMode(MM_ANISOTROPIC)时,逻辑描画領域坐标系的原点与画面的左上角是重叠的。然后需要调用SetWindowExt()函数和SetViewportExt()函数,来设定纵轴横轴的単位和方向以及伸缩比例


  

virtual CSize SetWindowExt(int cxWindow, int cyWindow);
virtual CSize SetViewportExt(int cxViewport, int cyViewport);

一般说SetWindowExt()函数和SetViewportExt()函数要成对调用。它们的意思(功能)是:用cxViewport个物理像素来表现cxWindow个逻辑点(数学上的长度)。同样用cyViewport个物理像素来表现cyWindow个逻辑点(数学上的长度)。cxcy看起来好像是为了设定描画範囲参数,其实不然。很简单,它们是代表逻辑长度与物理长度的比值的分子和分母。正负符号也可以设定。当cxViewport/cxWindow为正的情况下,X軸的方向是指向右方,反过来指向左方。 cyViewport/cyWindow为正的情况下,Y軸的方向是指向上方,反过来指向下方。


CRect rc;
    CWnd *pWnd = GetDlgItem(IDC_PIC_MAPS);//参数为控件ID 
// pWnd->SetWindowPos(NULL,0,0,500,200,SWP_NOZORDER|SWP_NOMOVE);
m_pCDC = GetDlgItem(IDC_PIC_MAPS)->GetDC();
m_pCDC->SetBkColor(RGB(0,0,0));


pWnd->GetClientRect(&rc);//rc为控件的大小。
int a = rc.Width();
int b = rc.Height();


m_pCDC->SetMapMode(MM_ANISOTROPIC);
m_pCDC->SetViewportExt(1,1);
m_pCDC->SetWindowExt((REAL_WIDTH )/rc.Width()+1,-(REAL_HEIGHT)/rc.Height()-1);
        m_pCDC->SetViewportOrg(0,rc.Height()/2);//改变原点


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值