《Visual C++ 6.0实例教程》电子教案 第2章

上传人:E**** 文档编号:89402359 上传时间:2019-05-24 格式:PPT 页数:18 大小:93KB
返回 下载 相关 举报
《Visual C++ 6.0实例教程》电子教案 第2章_第1页
第1页 / 共18页
《Visual C++ 6.0实例教程》电子教案 第2章_第2页
第2页 / 共18页
《Visual C++ 6.0实例教程》电子教案 第2章_第3页
第3页 / 共18页
《Visual C++ 6.0实例教程》电子教案 第2章_第4页
第4页 / 共18页
《Visual C++ 6.0实例教程》电子教案 第2章_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《《Visual C++ 6.0实例教程》电子教案 第2章》由会员分享,可在线阅读,更多相关《《Visual C++ 6.0实例教程》电子教案 第2章(18页珍藏版)》请在金锄头文库上搜索。

1、第2章 文档和视,内容摘要: 通过视类与用户交互 通过视类与用户交互,返回目录,2.1 通过视类与用户交互,学习目标 1. 在程序中响应鼠标消息 在程序中响应键盘消息,2.1,返回第2章,程序的实现步骤,利用AppWizard生成单文档程序框架(DocView ) 为视类添加数据成员,2.1,BOOL m_bMouseDown; /标识鼠标左键是否按下 HCURSOR m_hCross; /十字型鼠标句柄 HCURSOR m_hArrow; /标准型鼠标句柄 CPoint m_ptOld; /临时点 CPoint m_ptStart; /画线的起始点,3. 在构造函数中初始化成员变量,CDoc

2、ViewView:CDocViewView() m_bMouseDown = false; m_hCross = AfxGetApp()-LoadStandardCursor(IDC_CROSS); m_hArrow = AfxGetApp()-LoadStandardCursor(IDC_ARROW); ,2.1,void CDocViewView: OnLButtonDown (UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default m_bMouseDown = tr

3、ue; / 鼠标左键按下 m_ptStart = point; / 画线的起点 m_ptOld = point; / 临时点 SetCapture(); / 将鼠标消息发送到视窗口 CRect rect; GetClientRect( ,4为视类添加鼠标动作响应函数,2.1,void CMyDrawView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default if( m_bMouseDown ) CClientDC dc(this); dc.S

4、etROP2( R2_NOT ); dc.MoveTo( m_ptStart ); /这两行代码擦除从起点(鼠标按下点)到 dc.LineTo( m_ptOld ); /上次鼠标移动到的位置之间的临时线 dc.MoveTo( m_ptStart ); /这两行代码从起点到鼠标当前位置画线 dc.LineTo( point ); / m_ptOld = point; /鼠标当前位置在下一次鼠标移动事件看来就是“旧位置“ CView:OnMouseMove(nFlags, point); ,4为视类添加鼠标动作响应函数,void CMyDrawView:OnLButtonUp(UINT nFlag

5、s, CPoint point) if( m_bMouseDown ) m_bMouseDown = false; ReleaseCapture(); ClipCursor( NULL ); CClientDC dc(this); dc.SetROP2( R2_NOT ); dc.MoveTo( m_ptStart ); /这两行代码擦除从起点(鼠标按下点)到 dc.LineTo( m_ptOld ); /上次鼠标移动到的位置之间的临时线 dc.SetROP2( R2_COPYPEN ); dc.MoveTo( m_ptStart ); /这两行代码从起点到鼠标当前位置画线 dc.LineTo

6、( point ); / SetCursor(m_hArrow); /设置鼠标形状为标准箭头形 CView:OnLButtonUp(nFlags, point); ,2.1,程序的实现步骤_2,1为视类添加数据成员为视类添加数据成员,2.1,int m_nLine; /记录已输入字符行数 CString m_strDisplay; /保存当前字符串的变量,2. 在构造函数中初始化成员变量,CDocViewView:CDocViewView() / TODO: add construction code here m_nLine = 0; m_bMouseDown = false; m_hCro

7、ss = AfxGetApp()-LoadStandardCursor(IDC_CROSS); m_hArrow = AfxGetApp()-LoadStandardCursor(IDC_ARROW); ,3为视类添加键盘消息响应函数,2.1,void CDocViewView:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) if(nChar = VK_RETURN) /如果按下回车键 m_strDisplay.Empty(); m_nLine+; else if(m_strDisplay.GetLength() 64) /当前行字符数小于64 m_

8、strDisplay += nChar; CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics( ,基本知识,AfxGetApp() LoadStandardCursor(IDC_CROSS); 2.GetClientRect( / 设置鼠标形状为十字形,2.1,2.2 利用文档类处理数据,学习目标 1. 在文档类中保存数据,2.2,返回第2章,程序的实现步骤,添加类CLine,2.2,class CLine : public CObject public: CPoint m_ptStart; CPoint m_ptEnd; CLine();

9、 CLine(CPoint pt1, CPoint pt2); virtual CLine(); void Draw(CDC *pDC); ;,2.2,CLine:CLine() CLine:CLine(CPoint pt1, CPoint pt2) m_ptStart.x = pt1.x; m_ptStart.y = pt1.y; m_ptEnd.x = pt2.x; m_ptEnd.y = pt2.y; CLine:CLine() void CLine:Draw(CDC *pDC) pDC-MoveTo(m_ptStart); pDC-LineTo(m_ptEnd); ,程序的实现步骤,2

10、在文档类中添加保存数据的变量,2.2,public: CString m_strLastLine; CStringList m_strList; CPtrList m_LineList;,3修改视类成员函数OnButtonUp()和OnChar(),程序的实现步骤,2.2,void CDocViewView:OnLButtonUp(UINT nFlags, CPoint point) if( m_bMouseDown ) m_bMouseDown = false; ReleaseCapture(); ClipCursor( NULL ); CClientDC dc(this); dc.SetR

11、OP2( R2_NOT ); dc.MoveTo( m_ptStart ); dc.LineTo( m_ptOld ); dc.SetROP2( R2_COPYPEN ); dc.MoveTo( m_ptStart ); dc.LineTo( point ); CDocViewDoc *pDoc = GetDocument(); /得到文档类指针 CLine *pLine = new CLine(m_ptStart,point); /创建CLine对象 pDoc-m_LineList.AddTail( (void *) pLine); /将pLine加入到链表中 SetCursor(m_hAr

12、row); /设置鼠标形状为标准箭头形 CView:OnLButtonUp(nFlags, point); ,程序的实现步骤,void CDocViewView:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) CDocViewDoc *pDoc = GetDocument(); if(nChar = VK_RETURN) pDoc-m_strList.AddTail(m_strDisplay); pDoc-m_strLastLine.Empty(); m_strDisplay.Empty(); m_nLine+; else if(m_strDispl

13、ay.GetLength() m_strLastLine = m_strDisplay; CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics( ,2.2,程序的实现步骤,2.2,void CDocViewDoc:DrawLine(CDC *pDC) CLine *pLine; POSITION pos = m_LineList.GetHeadPosition(); for(; pos != NULL; m_LineList.GetNext(pos) pLine = (CLine *) m_LineList.GetAt(pos); pLine

14、-Draw(pDC); ,4. 在文档类中添加重画直线和重写文本的函数,程序的实现步骤,2.2,void CDocViewDoc:DrawText(CDC *pDC) TEXTMETRIC tm; pDC-GetTextMetrics( ,程序的实现步骤,2.2,void CDocViewView:OnDraw(CDC* pDC) CDocViewDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here pDoc-DrawLine(pDC); pDoc-DrawText(pDC); ,5修改视类成员函数OnDraw(),返回第2章,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号