VC:利用 CPtrArray 类保存图像

 

CPtrArray m_ptrArray;

参考源码:
class CGraph 
{
public:
 CPoint m_ptOrigin;
 CPoint m_ptEnd;
 UINT m_nDrawType;
 CGraph();
 CGraph(UINT m_nDrawType,CPoint m_ptOrigin,CPoint m_ptEnd);
 virtual ~CGraph();

};
保存方法1:
 CGraph graph(m_nDrawType,m_ptOrigin,point);
 m_ptrArray.Add(&graph);
 说明:这种方法可以保存图形的要素,但坐标没有转换。
 
坐标自动转换并保存: 
 OnPrepareDC(&dc); //重建图形绘制上下文
 
 //坐标转换
 dc.DPtoLP(&m_ptOrigin);
 dc.DPtoLP(&point);
 
 CGraph *pGraph=new CGraph(m_nDrawType,m_ptOrigin,point);
 
 添加到 Array 中。
 m_ptrArray.Add(pGraph);

 

关于图形错位的说明
当我们在窗口中点击鼠标左键的时候,得到的是设备坐标(680,390),在MM_TEXT的映射模式下,逻辑坐标和设备坐标是相等的,所以我们利用集合类保存的这个点的坐标是以象素为单位,坐标值为(680,390)。在调用OnDraw函数前,在OnPaint函数中调用了OnPrepareDC函数,调整了显示上下文的属性,将视口的原点设置为了(0,-150),这样的话,窗口的原点,也就是逻辑坐标(0,0)将被映射为设备坐标(0,-150),在画线的时候,因为GDI的函数使用的是逻辑坐标,而图形在显示的时候,Windows需要将逻辑坐标转化为设备坐标,因此,原先保存的坐标点(680,390)(在GDI函数中,作为逻辑坐标使用),根据转换公式xViewport = xWindow-xWinOrg+xViewOrg 和yViewport = yWindow-yWinOrg+yViewOrg,得到设备点的x坐标为680-0+0=680,设备点的y坐标为390-0+(-150)=240,于是我们看到图形在原先显示地方的上方出现了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值