基于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添加消息OnKeyDownif(nChar ==VK_ESCAPE){::PostQuitMessage(0);}4.在资源视图新创建一个ToolBar,并添加消息处理在CDrawView.hafx_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.cppON_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.hlist<CBitmap *> m_lstDesktopBmp;//每次画一笔都要装到链表里int m_nScreenX;int m_nScreenY;在CMainFrame.cppCMainFrame::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);//创建一个DCCDC 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());    // 把 链表 尾节点里的 图片 装到 cdcdc.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);}

MFC截图工具(不断更新)相关推荐

  1. windows xp进入访客_Windows XP时代的快速截图工具在Windows 10后续版本里将被逐渐弃用...

    自Windows XP开始微软就在系统里提供截图工具 (Snipping Tool) ,相信现在还有用户仍然使用这个截图工具. 不过在Windows 10里微软已经开发新的截图应用即截图和草图,该应用 ...

  2. linux install goolepinyin_Linux截图工具推荐(Ubuntu 18.04亲测)

    请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要介绍ubuntu3种常用的截图工具及使用方法, ...

  3. linux shutter截图,Ubuntu中安装Shutter截图工具

    Shutter 是我在 Linux 中最喜欢的截图工具.你可以使用它截图,还可以用它编辑截图或其他图像.它是一个在图像上添加箭头和文本的不错的工具.你也可以使用它在 Ubuntu 或其它你使用的发行版 ...

  4. 【转】Ubuntu 安装截图工具Shutter,并设置快捷键 Ctrl+Alt+A

    原文地址:https://www.linuxidc.com/Linux/2015-07/119753.htm 对一些错误内容做了纠正. Ubuntu 安装截图工具Shutter,并设置快捷键 Ctrl ...

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

    一.安装截图工具 Shutter 1. 添加安装包软件源 sudo add-apt-repository ppa:shutter/ppa 1 2. 更新源并安装 shutter sudo apt-ge ...

  6. 在Ubuntu|CentOS上安装Shutter截图工具及快捷键设置

    简介 Shutter前身叫GScrot,它是一款相当棒的截图软件. 通过Shutter,你可以截取包括选定区域.全屏幕.窗口.窗口内的控件甚至网页的图像.通过内置的强大插件机制,你可以在截图后,对图像 ...

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

    一.Ubuntu安装截图工具 Shutter 1. 添加安装包软件源 sudo add-apt-repository ppa:shutter/ppa 2. 更新源并安装 shutter sudo ap ...

  8. ffmpeg 截图太模糊了_技法课堂 | 巧用截图工具,一小时迅速完成线稿风效果图...

    相信大家平时在收集图纸的时候,都很喜欢这样一类线稿风的效果图 精致的线稿不仅可以展现出爆炸的细节,清清爽爽的色调在作品集中也是十分百搭的存在.尤其是剖透视的表达,不仅可以突出剖面空间感,还能详细的体现 ...

  9. ubuntu 安装截图工具 Shutter,并设置快捷键 Ctrl+SuperL

    2019独角兽企业重金招聘Python工程师标准>>> 一.安装截图工具Shutter 添加安装包软件源 sudo add-apt-repository ppa:shutter/pp ...

最新文章

  1. i27岁转行java,JavaTM I/O 性能分析[转]
  2. ELK日志分析平台.1-搭建
  3. NodeJS+Express+MongoDB - 张果 - 博客园
  4. Linux自有服务(2)-Linux从入门到精通第六天(非原创)
  5. java学习(100):集合类简介
  6. mysql 函数事务_MySQL:函数和事务
  7. --Symantec AntiVirus9.0--网上已很难寻的经典防病毒软件
  8. html border 边距,css中border-sizing属性的用法
  9. 两个整数求平均值,防止溢出的问题
  10. ​百度网盘下线SVIP免第三方广告特权;小米回应手机异常发热;Windows 11新应用商店将于6月24日亮相|极客头条...
  11. 巧用Delphi制作溅射屏幕
  12. 省市区三级联动 mysql_省市区三级联动实现
  13. web网站制作的实例(大学生期末作业)集合
  14. 二路归并排序的C++实现
  15. 【一起学习输入法】华宇拼音输入法开源版本解析(7)
  16. mysql中工作表工作簿的查询_如何使用SQL语句实现对Excel工作表数据的查询?
  17. 【服务器数据恢复】服务器重启后掉线硬盘重新上线同步数据被中断后数据丢失的数据恢复案例
  18. [SSL_CHX][2021-8-18]量身高
  19. 服务器登录 微信提醒,微信提示非常用设备登陆解决办法
  20. Xsell中常用的Linux命令

热门文章

  1. electron实践(2)
  2. 云服务器 ECS 搭建WordPress网站:购买 Linux 实例
  3. mysql主从配置,innobackup备份
  4. PowerEdge r730xd 安装centos 6.7
  5. 如何进行Android单元测试
  6. 为SQL缓存通知启用数据库
  7. Flex中让Panel等容器可拖动
  8. 奔向成功,有志人士创业的十大策略
  9. 程序员专属段子集锦 6/10
  10. webapi 重复提交问题