设为首页 加入收藏

TOP

11.6.3 截图功能的设计与实现(3)
2013-10-07 14:35:42 来源: 作者: 【 】 浏览:55
Tags:11.6.3 截图 功能 设计 实现

11.6.3  截图功能的设计与实现(3)

【代码解析】

第3行判断是否已经绘制橡皮筋框,如是则在第5行根据当前鼠标坐标设置橡皮筋框的大小,并重绘界面。在第9行更新消息编辑框中鼠标所在点RGB值的信息。

(3)当以上鼠标动作完成后,需要处理鼠标左键抬起动作,以完成用户对橡皮筋框的操作。

  1. 01  void CCatchDlg::OnLButtonUp(UINT nFlags, CPoint point)   
  2. 02  {  
  3. 03      m_bShowMsg=FALSE;  
  4. 04      m_bDraw=FALSE;  
  5. 05      SetTip();  
  6. 06      UpdateWindow();  
  7. 07      CDialog::OnLButtonUp(nFlags, point);  
  8. 08  }  

【代码解析】

当鼠标左键抬起后,关闭橡皮筋信息提示框,并更新信息编辑框的内容,刷新界面。

(4)为了使用户操作更加明了,在绘制、拖动及缩放编辑框时,应为鼠标更换不同的光标。

  1. 01  BOOL CCatchDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)   
  2. 02  {  
  3. 03      //设置改变截取矩形大小时的光标  
  4. 04      if (pWnd == this && m_rectTracker.SetCursor(this, nHitTest))   
  5. 06          return TRUE;   
  6. 07      else  
  7. 08      {//设置彩色光标  
  8. 09          SetCursor(AfxGetApp()->LoadCursor(IDC_COLOR));  
  9. 10          return TRUE;  
  10. 11      }     
  11. 12      return CDialog::OnSetCursor(pWnd, nHitTest, message);  
  12. 13  }  

【代码解析】

当鼠标在橡皮筋框中或橡皮筋框内时,调用橡皮筋类的光标。当光标在橡皮筋框外时,载入自定义的鼠标光标IDC_COLOR。

(5)在完成截图区域选择后,可以双击鼠标左键,将截取的图片保存到剪切板上,以实现截图的功能。

  1. 01  void CCatchDlg::OnLButtonDblClk(UINT nFlags, CPoint point)   
  2. 02  {  
  3. 03      int nHitTest;  
  4. 04      m_rectTracker.m_rect.NormalizeRect();       //使矩形规范化  
  5. 05      nHitTest=m_rectTracker.HitTest(point);      //鼠标与橡皮筋框位置关系  
  6. 06      if(nHitTest==8)  
  7. 07      {//在区域内处理  
  8. 08          CopyScreenToBitmap(m_rectTracker.m_rect,TRUE);  
  9.                                                     //将图像保存到剪切板  
  10. 09          PostQuitMessage(0);                     //退出程序  
  11. 10      }  
  12. 11      CDialog::OnLButtonDblClk(nFlags, point);  
  13. 12  }  

【代码解析】

第4行将橡皮筋选择框所选的矩形规范化,使其高度和宽度均为正值。第5行获取鼠标位置与橡皮筋框之间的关系。第6行判断鼠标是否在橡皮筋框内,如是则在第8行调用CopyScreenToBitmap()函数将用户截取的图像保存到剪切板。在第9行退出程序。

(6)有时用户对所选区域不满意,又不想通过调整橡皮筋框来实现。这时就需要用户重新绘制橡皮筋框,而重绘之前需要右击鼠标,以取消上次绘制的橡皮筋框。

  1. 01  void CCatchDlg::OnRButtonDown(UINT nFlags, CPoint point)   
  2. 02  {  
  3. 03      //如果已经截取矩形则清除截取的矩形  
  4. 04      m_bFirstDraw=FALSE;  
  5. 05      m_rectTracker.m_rect.SetRect(-1,-1,-1,-1);  
  6. 06      SetTip();  
  7. 07      UpdateWindow();  
  8. 08      CDialog::OnRButtonDown(nFlags, point);  
  9. 09  }  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇11.6.3 截图功能的设计与实现(1) 下一篇11.6.3 截图功能的设计与实现(4)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: