正文

第11课2007-05-01 15:37:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bclz/25438.html

分享到:

1.创建4个菜单,为其添加消息响应,用成员变量保存绘画类型。添加LButtonDown和Up消息。2.当窗口重绘时,如果想再显示原先画的数据,则需要保存数据。为此创建一个新类来记录绘画类型和两个点。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(); };   然后在void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point)中加入如下代码//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);//在堆中创建新的对象m_ptrArray.Add(pGraph);*///加入到指针数组中在GraphicView.h中有如下代码CPtrArray m_ptrArray;   在OnDraw中重画时调出数据for(int i=0;i<m_ptrArray.GetSize();i++)3.在CView::OnPaint()调用了OnDraw(),但在void CGraphicView::OnPaint()中MFC的Wizard没有调用OnDraw(),要注意这个区别。如果你此时想调用,必须手动添加代码。 OnDraw(&dc);4.让窗口具有滚动条的功能。   第1.将CGraphicView的头文件中的CView全部替换成CSrollView   第2.添加如下的代码void CGraphicView::OnInitialUpdate() {CScrollView::OnInitialUpdate();// TOD Add your specialized code here and/or call the base classSetScrollSizes(MM_TEXT,CSize(800,600));//设置映射模式,设定窗口大小。OK!}5.坐标系的转换,此处不再详细介绍,需要时请查阅相关资料。6.解决重绘时线跑到上面的问题。为什么会错位?因为逻辑坐标和设备坐标没有对应起来。解决方法:  在OnLButtonDown画完图后,保存之前。调用/* OnPrepareDC(&dc);//重新设置逻辑坐标的原点!!!dc.DPtoLP(&m_ptOrigin);//设备坐标转化为逻辑坐标dc.DPtoLP(&point);CGraph *pGraph=new CGraph(m_nDrawType,m_ptOrigin,point);m_ptrArray.Add(pGraph);*/7.另外两种方法来保存数据。  一种是用CMetaFileDC  另一种是利用兼容DC,重绘时利用 pDC->BitBlt(0,0,rect.Width(),rect.Height(),&m_dcCompatible,0,0,SRCCOPY);将兼容DC的图拷贝到屏幕DC上去。此处不再详细介绍这两种方法,因为介绍多了容易搞晕。呵呵

阅读(2330) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册