MFC 绘图

效果图:三张bmp图 + 字 + 竖线 组成

在OnPaint()函数中

cpp 复制代码
        CPaintDC dc(this);

		CRect rect;
		GetClientRect(&rect); //获取客户区矩形
		CDC   dcBmp;             //定义并创建一个内存设备环境
		dcBmp.CreateCompatibleDC(&dc);             //创建兼容性DC
		CBitmap   bmpBackground;                    
		bmpBackground.LoadBitmap(IDB_BITMAP8);    //载入资源中图片(背景图)
		
		BITMAP   m_bitmap;                         //图片变量               
		bmpBackground.GetBitmap(&m_bitmap);       //将图片载入位图中
		//将位图选入临时内存设备环境
		CBitmap  *pbmpOld = dcBmp.SelectObject(&bmpBackground);

		int x = 100; //在那个位置开始画
		int y = 100;
		//调用函数显示图片(不透明)
		dc.BitBlt(x, y, m_bitmap.bmWidth, m_bitmap.bmHeight, &dcBmp, 0, 0, SRCCOPY);		
		dcBmp.SelectObject(pbmpOld); //恢复CDC
		bmpBackground.DeleteObject();//删除,以便后面复用该变量


        //对于矩形背景,也可以直接画矩形
        {
        //圆角矩形,填充颜色,边框颜色不同
		//CBrush frameBrush, bgbrush;
		//bgbrush.CreateSolidBrush(RGB(231, 243, 235));//主窗体背景色画刷
		//frameBrush.CreateSolidBrush(RGB(183, 211, 190));
		//CRgn rgn;
		//rgn.CreateRoundRectRgn(x, y, x + 346, y + 58, 16, 16);//圆角的窗体区域
		//dc.FillRgn(&rgn, &bgbrush);
		//dc.FrameRgn(&rgn, &frameBrush, 3, 3);
        }


		
		bmpBackground.LoadBitmap(IDB_BITMAP9);    //载入资源中图片(状态图)
		bmpBackground.GetBitmap(&m_bitmap);       //将图片载入位图中
		pbmpOld = dcBmp.SelectObject(&bmpBackground);
		//调用函数显示图片
		//dc.BitBlt(x + 16, y + 8, m_bitmap.bmWidth, m_bitmap.bmHeight, &dcBmp, 0, 0, SRCCOPY);
        //显示图片,透明,根据颜色参数进行透明,比如给的白色,白色就是透明色
		dc.TransparentBlt(x + 16, y + 8, m_bitmap.bmWidth, m_bitmap.bmHeight, &dcBmp, 0, 0, m_bitmap.bmWidth, m_bitmap.bmHeight, RGB(255, 255, 255));
		dcBmp.SelectObject(pbmpOld); //恢复CDC
		bmpBackground.DeleteObject();//删除

		bmpBackground.LoadBitmap(IDB_BITMAP10);    //载入资源中图片(LIS图标)
		bmpBackground.GetBitmap(&m_bitmap);       //将图片载入位图中
		pbmpOld = dcBmp.SelectObject(&bmpBackground);
		//调用函数显示图片StretchBlt显示形状可变
		//dcBmp.BitBlt(x + 207, y + 8, m_bitmap.bmWidth, m_bitmap.bmHeight, &dcBmp, 0, 0, SRCCOPY); //画bmp,不透明
		dc.TransparentBlt(x + 207, y + 8, m_bitmap.bmWidth, m_bitmap.bmHeight, &dcBmp, 0, 0, m_bitmap.bmWidth, m_bitmap.bmHeight, RGB(255, 255, 255));
		dcBmp.SelectObject(pbmpOld); //恢复CDC
		bmpBackground.DeleteObject();//删除

		dcBmp.DeleteDC(); //删除cdc 
		//画字
		CFont new_font;
		//创建字体宋体格式 
		new_font.CreateFont(14, // nHeight
			0, //以逻辑单位方式指定字体中字符的平均宽度
			0, //指定偏离垂线和X轴在显示面上的夹角(单位:0.1度)
			0, //指定字符串基线和X轴之间的夹角(单位:0.1度)
			FW_BOLD, //指定字体磅数
			FALSE, //是不是斜体
			FALSE, //加不加下划线
			0, //指定是否是字体字符突出
			ANSI_CHARSET, //指定字体的字符集
			OUT_DEFAULT_PRECIS, //指定所需的输出精度
			CLIP_DEFAULT_PRECIS, //指定所需的剪贴精度
			DEFAULT_QUALITY, //指示字体的输出质量
			DEFAULT_PITCH | FF_SWISS, //指定字体的间距和家族
			_T("思源黑体") //指定字体的字样名称
			);
		//选择该字体进入PDC
		CFont* default_font = dc.SelectObject(&new_font);
		//设置字体背景为透明
		dc.SetBkMode(TRANSPARENT);
		//设置字体颜色
		dc.SetTextColor(RGB(0, 0, 0));
		//显示文本,左对齐
		CRect textRect;
		textRect.SetRect(x + 88, y + 11, x + 88 + 98, y + 11 + 14);
		dc.DrawText(CString("状态"), textRect, DT_SINGLELINE | DT_LEFT | DT_VCENTER);
		textRect.SetRect(x + 271, y + 11, x + 271 + 50, y + 11 + 14);
		dc.DrawText(CString("LIS"), textRect, DT_SINGLELINE | DT_LEFT | DT_VCENTER);
		//恢复PDC的缺省字体
		dc.SelectObject(default_font);
		//释放font对象
		new_font.DeleteObject();

		//画线
		CPen newPen, *oldPen;
		newPen.CreatePen(PS_SOLID, 2, RGB(219, 219, 219));
		oldPen = dc.SelectObject(&newPen);//选择改画笔
		dc.MoveTo(x+198, y+16);
		dc.LineTo(x + 198, y + 16 + 24);
		dc.SelectObject(oldPen); //恢复
		newPen.DeleteObject();
相关推荐
tan180°5 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
彭祥.6 小时前
Jetson边缘计算主板:Ubuntu 环境配置 CUDA 与 cudNN 推理环境 + OpenCV 与 C++ 进行目标分类
c++·opencv·分类
lzb_kkk7 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
胖大和尚8 小时前
clang 编译器怎么查看在编译过程中做了哪些优化
c++·clang
钱彬 (Qian Bin)9 小时前
一文掌握Qt Quick数字图像处理项目开发(基于Qt 6.9 C++和QML,代码开源)
c++·开源·qml·qt quick·qt6.9·数字图像处理项目·美观界面
双叶83610 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++
源代码•宸10 小时前
C++高频知识点(二)
开发语言·c++·经验分享
jyan_敬言12 小时前
【C++】string类(二)相关接口介绍及其使用
android·开发语言·c++·青少年编程·visual studio
liulilittle12 小时前
SNIProxy 轻量级匿名CDN代理架构与实现
开发语言·网络·c++·网关·架构·cdn·通信
tan77º13 小时前
【Linux网络编程】Socket - UDP
linux·服务器·网络·c++·udp