第2章文档和视 内容摘要: 1.通过视类与用户交互 2.通过视类与用户交互
第2章 文档和视 内容摘要: 1. 通过视类与用户交互 2. 通过视类与用户交互 返回目录
2.1 21通过视类与用户交互 学习目标 1.在程序中响应鼠标消息 2.在程序中响应键盘消息
2.1 通过视类与用户交互 学习目标 1. 在程序中响应鼠标消息 2. 在程序中响应键盘消息 2.1 返回第2章
程序的实现步骤 2.1 1.利用 App wizard生成单文档程序框架( Doc View) 2.为视类添加数据成员 BOOL m bOuse Dowrη;∥标识鼠标左键是否按下 CuRsor m cross;∥片十字型鼠标句柄 HCURSoR m hArrow;∥标准型鼠标句柄 CPoint m told ∥临时点 CPoint m ptstart; 线的起始点 3.在构造函数中初始化成员变量 CDocViewView C DocViewViewo m bOuse Down false m cRoss Afx GetAppo->LoadStandardCursor(IDC_ CROSS m hArrow Afx GetAppo->LoadStandardCursor(IDC_ ARROW)
程序的实现步骤 1. 利用AppWizard生成单文档程序框架(DocView ) 2. 为视类添加数据成员 2.1 BOOL m_bMouseDown; //标识鼠标左键是否按下 HCURSOR m_hCross; //十字型鼠标句柄 HCURSOR m_hArrow; //标准型鼠标句柄 CPoint m_ptOld; //临时点 CPoint m_ptStart; //画线的起始点 3. 在构造函数中初始化成员变量 CDocViewView::CDocViewView() { m_bMouseDown = false; m_hCross = AfxGetApp()->LoadStandardCursor(IDC_CROSS); m_hArrow = AfxGetApp()->LoadStandardCursor(IDC_ARROW); }
4.为视类添加鼠标动作响应函数 2.1 void CDocViewView:: OnLButtonDown (UINT nFlags, CPoint point) //TODO: Add your message handler code here and/or call default m bOuse down=true;∥鼠标左键按下 m_ ptstart point ∥画线的起点 m told point ∥临时点 SetCaptureo ∥将鼠标消息发送到视窗口 CRect rect GetclientRect(&rect) ∥得到客户窗口的大小 ClientToScreen(&rect);∥将当前窗口坐标转换成屏幕坐标 Clip Cursor(&rect) ∥把鼠标限定在其参数指定的矩形区域内 Setcursor(m cRoss) ∥设置鼠标形状为十字形 CView: OnLButton Down(nF lags, point)
2.1 void CDocViewView:: OnLButtonDown (UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_bMouseDown = true; // 鼠标左键按下 m_ptStart = point; // 画线的起点 m_ptOld = point; // 临时点 SetCapture(); // 将鼠标消息发送到视窗口 CRect rect; GetClientRect(&rect); // 得到客户窗口的大小 ClientToScreen(&rect); // 将当前窗口坐标转换成屏幕坐标 ClipCursor(&rect); // 把鼠标限定在其参数指定的矩形区域内 SetCursor(m_hCross); // 设置鼠标形状为十字形 CView::OnLButtonDown(nFlags, point); } 4.为视类添加鼠标动作响应函数
2.1 4.为视类添加鼠标动作响应函数 void CMy DrawView On Move(UINT nFlags, CPoint point) // TODO: Add your message handler code here and/or call default if( m bOuse Down CClientDC dc(this) dc. SetROP2( R2 NOT); dc. Move to( m pt start);∥这两行代码擦除从起点(鼠标按下点)到 dc Line To( m_told ) ∥上次鼠标移动到的位置之间的临时线 dc. Move to( m pt start);∥这两行代码从起点到鼠标当前位置画线 dc Line To( point m told= point;∥/鼠标当前位置在下一次鼠标移动事件看来就是"旧位置 CView On MouseMove (nFlags, point)
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.SetROP2( 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.为视类添加鼠标动作响应函数