MFC截图工具(不断更新)

基于MFC 开发的截图工具
文件名:Draw
创建单个文档,MFC标准
一.将视图显示
			1.MainFrm.cpp 中
			int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
							SetMenu(NULL);  去掉菜单
							CBRS_BOTTOM  将工具栏现实在下面
							将状态显示的代码去掉
			BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
			cs.style=WS_POPUP;
			2.Draw.cpp(App类)
			BOOL CDrawApp::InitInstance()
			m_pMainWnd->ShowWindow(SW_MAXIMIZE);
			3.添加按ESC退出界面
			在类视图CDrawView添加消息OnKeyDown
			if(nChar ==VK_ESCAPE)
			{
				::PostQuitMessage(0);
			}
			4.在资源视图新创建一个ToolBar,并添加消息处理
			在CDrawView.h
				afx_msg void OnQuit();//退出
				afx_msg void OnCureve();
				afx_msg void OnLine();
				afx_msg void OnEllipse();
				afx_msg void OnRect();
				afx_msg void OnTriangle();
				afx_msg void OnFill();
				afx_msg void OnColor();
				afx_msg void OnSave();
			在CDrawView.cpp
				ON_COMMAND(ID_QUIT,&CMainFrame::OnQuit)
				ON_COMMAND(ID_CURVE,&CMainFrame::OnCureve)
				ON_COMMAND(ID_ONLINE,&CMainFrame::OnLine)
				ON_COMMAND(ID_ELS,&CMainFrame::OnEllipse)
				ON_COMMAND(ID_RECT,&CMainFrame::OnRect)
				ON_COMMAND(ID_TRA,&CMainFrame::OnTriangle)
				ON_COMMAND(ID_RECT,&CMainFrame::OnRect)
				ON_COMMAND(ID_FILL,&CMainFrame::OnFill)
				ON_COMMAND(ID_SAVE,&CMainFrame::OnSave)
				ON_COMMAND(ID_COLOR,&CMainFrame::OnColor)
			5.将桌面图片显示到视图上
			在CMainFram.h
				list<CBitmap *> m_lstDesktopBmp;//每次画一笔都要装到链表里
				int m_nScreenX;
				int m_nScreenY;
			在CMainFrame.cpp
			CMainFrame::CMainFrame()
			{
				m_nScreenX=GetSystemMetrics(SM_CXSCREEN);
				m_nScreenY=GetSystemMetrics(SM_CYSCREEN);
				//获取桌面的图片
				CWindowDC m_dcDesktop(GetDesktopWindow());
				//保存这张图片
				CBitmap *bitmap=new CBitmap;
				bitmap->CreateCompatibleBitmap(&m_dcDesktop,m_nScreenX,m_nScreenY);
				//创建一个DC
				CDC cdc;
				cdc.CreateCompatibleDC(&m_dcDesktop);
				cdc.SelectObject(bitmap);
				//把桌面的图片放到cdc里
				cdc.BitBlt(0,0,m_nScreenX,m_nScreenY,&m_dcDesktop,0,0,SRCCOPY);
				//把bitmap放到链表里
				m_lstDesktopBmp.push_back(bitmap);
			}
			在CDrawView.h中
			void CDrawView::OnDraw(CDC* /*pDC*/)
				//  把 链表的  尾节点的图片 放到 view 上
			CMainFrame* frame = (CMainFrame*)AfxGetMainWnd();

			CClientDC dc(this);  //  窗口

			CDC cdc;               //  装 链表 尾节点里的 图片
			cdc.CreateCompatibleDC(&dc);
			cdc.SelectObject(frame->m_lstDesktopBmp.back());    // 把 链表 尾节点里的 图片 装到 cdc

			dc.BitBlt(0,0,frame->m_nScreenX,frame->m_nScreenY,&cdc,0,0,SRCCOPY);
二.画图
            1,鼠标左键抬起保存图片到链表尾部(m_nDrawStyle判断画的是什么图形,m_nbDrawFlag判断是否画图,要在构造函数初始化)
			void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
			{
				// TODO: 在此添加消息处理程序代码和/或调用默认值
				m_bDrawFlag=false;
				//保存图片到链表
				CMainFrame *frame=(CMainFrame*)AfxGetMainWnd();
				CClientDC dc(this);

				CBitmap *bitmap=new CBitmap;
				bitmap->CreateCompatibleBitmap(&dc,frame->m_nScreenX,frame->m_nScreenY);

				CDC cdc;
				cdc.CreateCompatibleDC(&dc);
				cdc.SelectObject(bitmap);
				cdc.BitBlt(0,0,frame->m_nScreenX,frame->m_nScreenY,&dc,0,0,SRCCOPY);
				frame->m_lstDesktopBmp.push_back(bitmap);
				CView::OnLButtonUp(nFlags, point);
			}
			2.画图
			void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
			{
				// TODO: 在此添加消息处理程序代码和/或调用默认值
				if(m_bDrawFlag==true)
				{
					CMainFrame *frame=(CMainFrame*)AfxGetMainWnd();
					CClientDC dc(this);
					//创建兼容性  DC
					//拿链表的最后一张图片刷新
					CDC cdc;
					cdc.CreateCompatibleDC(&dc);
					cdc.SelectObject(frame->m_lstDesktopBmp.back());
					//创建一个位图Bitmap
					//复制链表尾结点的图片
					CBitmap bitmap;
					bitmap.CreateCompatibleBitmap(&dc,frame->m_nScreenX,frame->m_nScreenY);

					CDC tempdc;
					tempdc.CreateCompatibleDC(&dc);
					tempdc.SelectObject(bitmap);
					tempdc.BitBlt(0,0,frame->m_nScreenX,frame->m_nScreenY,&cdc,0,0,SRCCOPY);
					//不能传输dc到tempdc
					//看画什么图形
					switch (m_nDrawStyle)
					{
					case ID_CURVE:
						dc.MoveTo(m_pointMouseDown.x,m_pointMouseDown.y);
						dc.LineTo(point.x,point.y);
						m_pointMouseDown=point;
						break;
					case ID_ONLINE:
						//不能用cdc画图,因为cdc就是链表的最后一张位图,更改cdc就是更改最后一张图片
						//所以在tempdc上面画图
						//移动一次创建的Bitmap就删除,没有改变
						tempdc.MoveTo(m_pointMouseDown.x,m_pointMouseDown.y);
						tempdc.LineTo(point.x,point.y);
						dc.BitBlt(0,0,frame->m_nScreenX,frame->m_nScreenY,&tempdc,0,0,SRCCOPY);
						break;
					case ID_ELS:
						tempdc.SelectStockObject(NULL_BRUSH);
						tempdc.Ellipse(m_pointMouseDown.x,m_pointMouseDown.y,point.x,point.y);
						dc.BitBlt(0,0,frame->m_nScreenX,frame->m_nScreenY,&tempdc,0,0,SRCCOPY);
						break;
					case ID_RECT:
						tempdc.Rectangle(m_pointMouseDown.x,m_pointMouseDown.y,point.x,point.y);
						dc.BitBlt(0,0,frame->m_nScreenX,frame->m_nScreenY,&tempdc,0,0,SRCCOPY);
						break;
					case ID_TRA:
						tempdc.SelectStockObject(NULL_BRUSH);
						POINT rect[3]={{(point.x+m_pointMouseDown.x)/2,m_pointMouseDown.y},{m_pointMouseDown.x,point.y},{point.x,point.y}};
						tempdc.Polygon(rect,3);
						dc.BitBlt(0,0,frame->m_nScreenX,frame->m_nScreenY,&tempdc,0,0,SRCCOPY);
						break;
					}
				}
				CView::OnMouseMove(nFlags, point);
			}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-29 02:08:06

MFC截图工具(不断更新)的相关文章

MFC 之 截图工具

这个截图工具能实现最主要的截图功能,并保存为bmp图片. 编写环境是vs2005,使用Unicode,基于对话框. 没什么难度,直接看代码 项目名称为CutOut // CutOutDlg.h : 头文件 // #pragma once #include <atlimage.h> // CCutOutDlg 对话框 class CCutOutDlg : public CDialog { // 构造 public: CCutOutDlg(CWnd* pParent = NULL); // 标准构

ubuntu安装Shutter截图工具以及设置系统快捷键

一.安装截图工具 Shutter 1. 添加安装包软件源 sudo add-apt-repository ppa:shutter/ppa 2. 更新源并安装 shutter sudo apt-get update sudo apt-get install shutter 3. 搜索 shutter 可看到已安装成功 二.设置 Shutter 快捷键 1. 打开系统设置 2. 打开 Keyboard 键盘设置 3. 添加成功的状态 4. 单击右侧 Disabled,然后快速按下 Ctrl+Alt+

ubuntu 安装截图工具 Shutter,并设置快捷键 Ctrl+Alt+A

一.安装截图工具 Shutter 1. 添加安装包软件源 sudo add-apt-repository ppa:shutter/ppa 2. 更新源并安装 shutter sudo apt-get update sudo apt-get install shutter 3. 搜索 shutter 可看到已安装成功 二.设置 Shutter 快捷键 1. 打开系统设置 2. 打开 Keyboard 键盘设置 3. 添加成功的状态 4. 单击右侧 Disabled,然后快速按下 Ctrl+Alt+

ubuntu 14.04 安装截图工具 Shutter及使用

一.安装截图工具 Shutter 1. 添加安装包软件源 sudo add-apt-repository ppa:shutter/ppa 1 2. 更新源并安装 shutter sudo apt-get update sudo apt-get install shutter 1 2 3. 搜索 shutter 可看到已安装成功 二.设置 Shutter 快捷键 1. 打开系统设置 2. 打开 Keyboard 键盘设置 3. 添加成功的状态 4. 单击右侧 Disabled,然后快速按下 Ctr

安装截图工具 Shutter【转】

本文转载自:http://blog.csdn.net/hanshileiai/article/details/46843713 一.安装截图工具 Shutter 1. 添加安装包软件源 sudo add-apt-repository ppa:shutter/ppa 1 1 2. 更新源并安装 shutter sudo apt-get update sudo apt-get install shutter 1 2 1 2 3. 搜索 shutter 可看到已安装成功 二.设置 Shutter 快捷

MFC截图和界面刷新相关问题

问题描述: 就是首先用CDC来截图,保存图片的路径通过dlg窗体来手动设置并传入.可是截下来的图片就会连带那个对话框也截图下来. 就是这样,我想截后面那个图,前面这个对话框是要传入一个图片保存路径,可是连这个框也截下来了,就是点击确定后,那个框还没有来得及消失,就截图了, 见图片; 部分代码: 解决方案: 涉及到的函数有: BOOL UpdateWindow(HWND hWnd // 窗口的句柄); 如果窗口更新的区域不为空,UpdateWindow函数通过发送一个WM_PAINT消息来更新指定

如何使用Win10原生的截图工具Snipping Tool?

如何使用Win10原生的截图工具Snipping Tool? ?Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者博客:https://blog.51cto.com/lander IT Helpdesk 工程师实战培训课程:https://edu.51cto.com/lecturer/733218.html轻松进外企:IT Helpdesk工程师实战自学之路:https://blog.51cto.com/lander/2413018更新时间:201

mint下截图工具shutter的安装和使用设置

[原创作品,技术交流.允许转载,转载时请务必以超链接形式标明文章原始出处 .作者信息.如有错误,请指正] /** author: lihaibo date: 1/25/2016 */ 今天安装了双系统之后,有时候需要截图不是很方便,查了下linux下比较流行的截图工具:shutter 1.安装shutter 从开源社区下载:  http://www.oschina.net/p/shutter/ 操作命令: sudo add-apt-repository ppa:shutter/ppa sudo

截图工具无法使用解决方法

重装系统之后,截图工具就突然用不了,问了下度娘,现将方法整理一下. (1)首先在C盘上搜索:tpcps.dll文件,搜索到之后将数据最大的那个文件右键或者点击文件在窗口的工具栏上点击[注册dl] (2)如果文件上找不到tpcps.dll文件,则上网下载符合计算机位数的dll文件 (3)将tpcps.dll文件复制粘贴在c:\windows\system32的文件夹下,如果是64位的系统,则放置在C:\Windows\SysWOW64文件夹下,然后再点击该文件,在工具栏上点击[注册dll] 注释: