QQ 静态截图程序模拟实现

来源: 作者: 2007-12-03 出处:pcdog.com

qq  ssh  
下一页 1 2 3 4 

本文示例源代码下载

  看到QQ这样的截图实在忍心不住想,是怎以实现的?想了许久想到一个实现法子,下面就让我给大家展示一下,模拟QQ静态模拟截图,我写的代码比较乱,是想到哪写到哪,我想肯实还有比这更简单的办法!!程序实现思路,程序是基于对话框,无标题栏,系统菜单,最小化框,最大化框,无边框....,程序初始化时,把整个桌面屏幕截图,保存下来,然后把对话框设置全屏顶层窗口,然后把保存下来的位图,在OnEraseBkgnd中把整个位图贴到对话框上,然后用像皮筋类选择截取范围,看起来就像操作屏幕一样 。

QQ 静态截图程序模拟实现(图一)

  图一 示例

  下面说说实现细节:

  一、初始化程序,在CCatchScreenDlg构造函数中 初始化像皮筋类和保存全屏位图,

   //初始化像皮筋类
  m_rectTracker.m_nStyle=CRectTracker::resizeInside|CRectTracker::solidLine; 
  m_rectTracker.m_rect.SetRect(-1,-1,-1,-1);
  m_hCursor=AfxGetApp()->LoadCursor(IDC_CURSOR1); 
  
  
  m_bDraw=FALSE;
  m_bFirstDraw=FALSE;
  m_bQuit=FALSE;
  m_bShowMsg=FALSE;
  m_startPt=0;
  
  //获取屏幕分辩率
  m_xScreen = GetSystemMetrics(SM_CXSCREEN);
  m_yScreen = GetSystemMetrics(SM_CYSCREEN);
  //截取屏幕到位图中
  CRect rect(0, 0,m_xScreen,m_yScreen);
  m_pBitmap=CBitmap::FromHandle(CopyScreenToBitmap(&rect));
  
  //一定要初始化m_rgn,
  m_rgn.CreateRectRgn(0,0,50,50);
  然后在CCatchScreenDlg::OnInitDialog()中设置对话框成顶层窗口。在 CCatchScreenDlg::OnEraseBkgnd中 用整个桌面位图填充全屏对话框背景

  二、从 CRectTracker中派生了一个CTrack 类在类中重载了DrawTrackerRect函数,在函数中直接 更新窗口,消除拖动和改变大小时的虚线框可能还有更简单的方法,本人能力有限想不出更简的!


更多内容请看PCdog.com--QQ  QQ表情  QQ病毒专题
下一页 1 2 3 4 
上一篇:也谈QQ安全
下一篇:QQ 静态截图完善实现之改造 CRectTracker 类