MFC SDI 利用双缓冲实现截图程序

时间:2022-08-20 10:05:11

 

废话不多说先上图

 

MFC SDI 利用双缓冲实现截图程序

 

 

 

-------------------------------------------好了 开始废话

 

编译器: VC6.0

MSDN: 2008

程序功能:主要功能如图中菜单所示 且每个功能的实现代码基本一样

 仅仅将显示器能显示的部分 截取下来 然后绘制到视图中(并没有将截取的图片保存成硬盘中!)

-------------------------------------------本程序实现步骤

1. 建立MFC 单文档(SDI)程序 CGetWndBmp 注释掉工具栏 删除不需要的菜单(清晰 简单)

 

2. 在视图类 CCGetWndBmpView   OnPaint()消息中为程序添加一张背景图片

 

 

 

由于图片覆盖了客户区的整个部分 也为了运行效率 重载函数OnEraseBkgnd()

(同样可以将OnPaint()函数中贴图的代码放到 OnEraseBkgnd() 函数中来!!)

 

 

 

 

3.  添加菜单及其消息响应函数 函数名字一看便知道 [ 点击|菜单|得到|整个/半个| 屏幕/视图 ]

 

 afx_msg void OnMenuGetFullScreen();
 afx_msg void OnMenuGetFullView();
 afx_msg void OnMenuGetHalfScreen();
 afx_msg void OnMenuGetHalfView();
 afx_msg void OnMenuGetFullDesktop();

 afx_msg void OnMenuGetDialogCtrl();

 

4. 我再啰嗦一句,这几个功能的实现代码基本是一样的,有些仅仅是变动了几个参数

我没有提取出来单独作为一个函数,是想大家看的清晰一点,实现一个截取的功能 不用太复杂

 

看懂下面第一个未折叠的代码 基本就能举一反百了

 

//得到整个屏幕
A: void CMainFrame::OnMenuGetFullScreen()

 

 

 

 

B: 得到半个屏幕大小的图片

void CMainFrame::OnMenuGetHalfScreen()

 

 

 

 

C: 得到整个视图大小的图片

void CMainFrame::OnMenuGetFullView()

 

 

 

D: 得到半个试图大小的图片

void CMainFrame::OnMenuGetHalfView()

 

 

 

E: 得到桌面大小的图片

void CMainFrame::OnMenuGetFullDesktop()

 

 

 

 

#define TIMER_ID_GET_DIALOG         (1)  定时器ID
#define TIMER_ID_GET_CTRL             (2) 定时器ID
#define DIALOG_WINDOW_POS_XY   (400)  弹出窗口位置

 

F: 

得到弹出对话框大小的图片

设置定时器截图

得到对话框中某一控件大小的图片

 

OnMenuGetDialog()

OnTimer()

OnMenuGetDialogCtrl()

 

 

-------------------------------------------

 

程序源代码: http://download.csdn.net/source/3326623

 

.

.

.