当前位置: 首页 > news >正文

【上位机——MFC】绘图

相关类

CDC类(绘图设备类):封装了各种绘图相关的函数,以及两个非常重要的成员变量m_hDC和m_hAttribDC
CPaintDC类,封装了在WM_PAINT消息中绘图的绘图设备
CClientDC类,封装了在客户区绘图的绘图设备

CGdiObject类(绘图对象类)
封装了各种绘图对象相关的操作,以及一个非常重要的成员变量m_hObject(绘图对象句柄)
CPen类,封装了画笔的操作
CBrush类,封装了画刷的操作
CFont类,封装了字体的操作
CBitmap,封装了位图的操作

代码示例


// MFCDrawView.cpp: CMFCDrawView 类的实现
//#include "pch.h"
#include "framework.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "MFCDraw.h"
#endif#include "MFCDrawDoc.h"
#include "MFCDrawView.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// CMFCDrawViewIMPLEMENT_DYNCREATE(CMFCDrawView, CView)BEGIN_MESSAGE_MAP(CMFCDrawView, CView)// 标准打印命令ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)ON_WM_PAINT()ON_COMMAND(ID_PEN, &CMFCDrawView::OnPen)ON_COMMAND(ID_BRUSH, &CMFCDrawView::OnBrush)ON_COMMAND(ID_BITMAP, &CMFCDrawView::OnBitmap)ON_COMMAND(ID_FONT, &CMFCDrawView::OnFont)
END_MESSAGE_MAP()// CMFCDrawView 构造/析构CMFCDrawView::CMFCDrawView() noexcept
{// TODO: 在此处添加构造代码}CMFCDrawView::~CMFCDrawView()
{
}BOOL CMFCDrawView::PreCreateWindow(CREATESTRUCT& cs)
{// TODO: 在此处通过修改//  CREATESTRUCT cs 来修改窗口类或样式return CView::PreCreateWindow(cs);
}// CMFCDrawView 绘图void CMFCDrawView::OnDraw(CDC* /*pDC*/)
{CMFCDrawDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码
}// CMFCDrawView 打印BOOL CMFCDrawView::OnPreparePrinting(CPrintInfo* pInfo)
{// 默认准备return DoPreparePrinting(pInfo);
}void CMFCDrawView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{// TODO: 添加额外的打印前进行的初始化过程
}void CMFCDrawView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{// TODO: 添加打印后进行的清理过程
}// CMFCDrawView 诊断#ifdef _DEBUG
void CMFCDrawView::AssertValid() const
{CView::AssertValid();
}void CMFCDrawView::Dump(CDumpContext& dc) const
{CView::Dump(dc);
}CMFCDrawDoc* CMFCDrawView::GetDocument() const // 非调试版本是内联的
{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFCDrawDoc)));return (CMFCDrawDoc*)m_pDocument;
}
#endif //_DEBUG// CMFCDrawView 消息处理程序void CMFCDrawView::OnPaint()
{CPaintDC dc(this); // device context for painting// TODO: 在此处添加消息处理程序代码// 不为绘图消息调用 CView::OnPaint()//dc.Rectangle(100,100,300,300);}void CMFCDrawView::OnPen()
{// TODO: 在此添加命令处理程序代码CClientDC dc(this);CPen pen(PS_SOLID,2,RGB(255,0,0));CPen* oldPen = dc.SelectObject(&pen);dc.Rectangle(100, 100, 300, 300);dc.SelectObject(oldPen);pen.DeleteObject();}void CMFCDrawView::OnBrush()
{// TODO: 在此添加命令处理程序代码CClientDC dc(this);CBrush brush(RGB(0, 255, 0));CBrush* oldBrush = dc.SelectObject(&brush);dc.Rectangle(100, 100, 300, 300);dc.SelectObject(oldBrush);brush.DeleteObject();}void CMFCDrawView::OnBitmap()
{// TODO: 在此添加命令处理程序代码//添加位图资源(操作资源无需写代码)//创建一个和当前DC相匹配的内存DCCClientDC dc(this);CDC memdc;memdc.CreateCompatibleDC(&dc);//将位图数据送给内存DCCBitmap bmp;bmp.LoadBitmap(IDB_BITMAP1);CBitmap* oldmp = memdc.SelectObject(&bmp);//成像dc.BitBlt(100,100,48,48,&memdc,0,0,SRCCOPY);//将位图数据要回来memdc.SelectObject(oldmp);//销毁位图bmp.DeleteObject();//销毁内存DCmemdc.DeleteDC();}void CMFCDrawView::OnFont()
{// TODO: 在此添加命令处理程序代码CClientDC dc(this);CFont font;font.CreatePointFont(300,_T("黑体"));CFont* oldFont = dc.SelectObject(&font);dc.TextOut(100,100, _T("hello"));dc.SelectObject(oldFont);font.DeleteObject();}

相关文章:

  • Servlet--快速入门及HTTP概述
  • DXFViewer进行中2 -> 直线 解析+渲染 ✅已完成
  • uniapp开发09-设置一个tabbar底部导航栏且配置icon图标
  • react-13react中外部css引入以及style内联样式(动态className与动态style)
  • 貌似我的ollama加载的模型被下载了两份?终于搞懂原理了。
  • 「Mac畅玩AIGC与多模态22」开发篇18 - 多段输出拼接与格式化展现工作流示例
  • ASP.NET Core 中间件
  • 微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT
  • PyTorch 与 TensorFlow 中基于自定义层的 DNN 实现对比
  • 基于Piecewise Jerk Speed Optimizer的速度规划算法(附ROS C++/Python仿真)
  • 免费视频压缩软件
  • 应用服务器Tomcat
  • 【优选算法 | 模拟】探索模拟算法: 编程与问题分析的双重 考验
  • SVG数据可视化设计(AI)完全工作流解读|计育韬
  • 如何使用 QuickAPI 推动汽车行业数据分享:数据仓库场景下的实践
  • 【开源深度解析】从零打造AI暗棋对战系统:Python实现中国象棋暗棋全攻略
  • 算法思想之深度优先搜索(DFS)、递归以及案例(最多能得到多少克黄金、精准核酸检测、最富裕的小家庭)
  • Nginx 安全防护与 HTTPS 安全部署
  • 自主智能体(Agentic AI)与传统人工智能:从数字化转型到未来变革
  • LeetCode 3423. 循环数组中相邻元素的最大差值 题解
  • 罗马尼亚临时总统博洛让任命普雷多尤为看守政府总理
  • 国铁集团:铁路五一假期旅客发送量累计已超1亿人次
  • 想要“逆转”糖尿病,减少这两处脂肪是关键
  • 伊朗公布新型弹道导弹,“萨德”系统无法拦截
  • 今晚上海地铁1、2、10、17号线加开定点班车至次日0点
  • “五一”假期第三天,预计全社会跨区域人员流动量超2.8亿人次