MFC标签设计工具 图片控件上,移动鼠标显示图片控件内的鼠标xy的水平和垂直辅助线要在标签模板上加上文字、条型码、二维码 找准坐标和字体大小 源码

需求:要在标签模板上加上文字、条型码、二维码 找准坐标和字体大小

我生成标签时,需要对齐和 调文字字体大小。这工具微调 能快速知道位置 和字体大小。
标签设计(点击图片,上下左右箭头移动 +或-调字体)

已经够用了,滚动条还没完全实现,如果能拖动文字、条型码、二维码到上面就更好了,就是有太多参数需要设置。
在这里插入图片描述

在MFC(Microsoft Foundation Classes)中,要实现在一个图片控件上移动鼠标时显示图片控件内鼠标位置的水平和垂直辅助线,你可以通过处理鼠标移动事件来绘制这些辅助线。以下是一个简化的示例,展示了如何在一个继承自CStatic的类中实现这个功能。

首先,你需要创建一个新的类,继承自CStatic,并在这个类中处理WM_MOUSEMOVE消息来绘制辅助线。

// PictureControl.h
#pragma once#include <afxwin.h>class CPictureControl : public CStatic
{
public:CPictureControl();virtual ~CPictureControl();protected:afx_msg void OnMouseMove(UINT nFlags, CPoint point);DECLARE_MESSAGE_MAP()void DrawCrossHair(CPoint point);
};

.cpp文件中,你需要实现OnMouseMoveDrawCrossHair方法。OnMouseMove方法会在鼠标移动时被调用,而DrawCrossHair方法用于在控件上绘制辅助线。

// PictureControl.cpp
#include "PictureControl.h"BEGIN_MESSAGE_MAP(CPictureControl, CStatic)ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()CPictureControl::CPictureControl()
{
}CPictureControl::~CPictureControl()
{
}void CPictureControl::OnMouseMove(UINT nFlags, CPoint point)
{CStatic::OnMouseMove(nFlags, point);// 绘制辅助线DrawCrossHair(point);
}void CPictureControl::DrawCrossHair(CPoint point)
{CDC* pDC = GetDC();CRect rect;GetClientRect(&rect);// 保存当前DC状态int nSavedDC = pDC->SaveDC();// 设置ROP模式为R2_NOT,这样可以用相同的操作来清除线条pDC->SetROP2(R2_NOT);// 绘制水平线pDC->MoveTo(0, point.y);pDC->LineTo(rect.right, point.y);// 绘制垂直线pDC->MoveTo(point.x, 0);pDC->LineTo(point.x, rect.bottom);// 恢复DC状态pDC->RestoreDC(nSavedDC);ReleaseDC(pDC);
}

最后,确保你的对话框或窗口中的图片控件使用了这个CPictureControl类。如果你是在对话框中使用,你可能需要在对话框的头文件中声明一个CPictureControl成员变量,并在对话框的OnInitDialog方法中将这个控件与实际的控件ID关联起来。

// 在对话框头文件中
CPictureControl m_picControl;// 在对话框的OnInitDialog方法中 
m_picControl.SubclassDlgItem(IDC_PICTURE_CONTROL, this);

请注意,这个示例仅提供了基本的实现框架。根据你的具体需求,你可能需要对代码进行调整,比如在绘制辅助线之前清除之前的线条,或者处理图片的缩放等问题。

最后绑定ID (m_picControl.SubclassDlgItem(IDC_PICTURE_CONTROL, this);)也可以这样

在这里插入图片描述

MFC调用自定义控件类OnMouseMove不响应

必须要将Notify设为True才行。
在这里插入图片描述

画出来了,但是没有清除鼠标移动前的所有辅助线痕迹

在这里插入图片描述

改成点击

必须要将Notify设为True才行。
在这里插入图片描述

// CDlgLableDesign.cpp: 实现文件
//#include "pch.h"
#include "afxdialogex.h"
#include "CDlgLableDesign.h"
#include "Resource.h"#define MAX_SCROLL_POS 2000typedef struct Para
{char templateName[200];LONG fontHeight=82;CPoint point;
}Para;
static Para para = {0};// CDlgLableDesign 对话框IMPLEMENT_DYNAMIC(CDlgLableDesign, CDialogEx)CDlgLableDesign::CDlgLableDesign(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_DIALOG_LabelDesign, pParent)
{}CDlgLableDesign::~CDlgLableDesign()
{
}void CDlgLableDesign::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_EDIT_LOG2, m_editDisplay);//DDX_Control(pDX, IDC_STATIC_IMAGE, m_pictureCtrl);
}BEGIN_MESSAGE_MAP(CDlgLableDesign, CDialogEx)ON_BN_CLICKED(IDC_BUTTON_PRINT_OUTBOX, &CDlgLableDesign::OnBnClickedButtonPrintOutbox)ON_WM_TIMER()
//	ON_WM_MOUSEMOVE()
//	ON_WM_PAINT()
ON_STN_CLICKED(IDC_STATIC_IMAGE, &CDlgLableDesign::OnClickedStaticImage)
//ON_WM_VSCROLL()
ON_WM_CLOSE()
END_MESSAGE_MAP()void CDlgLableDesign::Log(CString szInfo)
{logger.INFO_F(szInfo.GetBuffer(0));CString strInfo;m_editDisplay.GetWindowText(strInfo);int nLength = strInfo.GetLength();m_editDisplay.SetSel(nLength, nLength, FALSE);m_editDisplay.SetFocus();m_editDisplay.SetSel(-1, -1);m_editDisplay.ReplaceSel(szInfo + "\r\n");
}// CDlgLableDesign 消息处理程序
BOOL CDlgLableDesign::LoadImageToPictureControl(CString bmpPath)
{CStatic* pPictureControl = (CStatic*)GetDlgItem(IDC_STATIC_IMAGE);if (pPictureControl == nullptr || bmpPath.IsEmpty())return FALSE;// 加载图片CImage image;HRESULT hr = image.Load(bmpPath);if (FAILED(hr)){Log("加载图片失败"+ bmpPath);return FALSE;}// 获取图片大小int nWidth = image.GetWidth();int nHeight = image.GetHeight();//Log("宽高 "+CString(to_string(nWidth).c_str())+" * " + CString(to_string(nHeight).c_str()) +" 转为mm " + CString(to_string(nWidth* PixToMm600).c_str()) + " * " + CString(to_string(nHeight * PixToMm600).c_str()));// 调整控件大小以适应图片//CRect rect;//pPictureControl->GetWindowRect(&rect);pPictureControl->MoveWindow(208, 10, nWidth, nHeight);// 获取控件的DCCDC* pDC = pPictureControl->GetDC();if (pDC == nullptr)return FALSE;// 创建兼容DCCDC dcImage;if (!dcImage.CreateCompatibleDC(pDC))return FALSE;// 选择图片到DCCBitmap bmp;bmp.Attach(image.Detach());CBitmap* pOldBmp = dcImage.SelectObject(&bmp);// 将图片绘制到控件上pDC->BitBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY);// 清理dcImage.SelectObject(pOldBmp);pPictureControl->ReleaseDC(pDC);//CImage image;//HRESULT hResult = image.Load(_T(bmpPath)); // 加载图片//if (SUCCEEDED(hResult))//{//	// 获取Picture Control的句柄//	CStatic* pPictureControl = (CStatic*)GetDlgItem(IDC_STATIC_IMAGE);//	// 获取控件大小//	CRect rect;//	pPictureControl->GetClientRect(&rect);//	int controlWidth = rect.Width();//	int controlHeight = rect.Height();//	// 获取图片原始尺寸//	int imageWidth = image.GetWidth();//	int imageHeight = image.GetHeight();//	// 创建兼容的DC//	CDC* pDC = pPictureControl->GetDC();//	CDC memDC;//	memDC.CreateCompatibleDC(pDC);//	// 创建兼容的位图,并选入内存DC//	CBitmap bmp;//	bmp.CreateCompatibleBitmap(pDC, controlWidth, controlHeight);//	CBitmap* pOldbmp = memDC.SelectObject(&bmp);//	// 清空背景//	memDC.FillSolidRect(&rect, pDC->GetBkColor());//	// 使用CImage绘制到内存DC,这里使用缩放//	image.Draw(memDC.m_hDC, 0, 0, controlWidth, controlHeight, 0, 0, imageWidth, imageHeight);//	// 将内存DC绘制到控件上//	pDC->BitBlt(0, 0, controlWidth, controlHeight, &memDC, 0, 0, SRCCOPY);//	// 清理//	memDC.SelectObject(pOldbmp);//	ReleaseDC(pDC);//}//else//{//	Log("图片加载失败:" + bmpPath);//}return TRUE;
}
BOOL ReadPara()
{CString DebugPara = "";GetPrivateProfileString("DEBUG", "DebugPara", "", DebugPara.GetBuffer(2000), 2000, configFileName); DebugPara.ReleaseBuffer();if (DebugPara.GetLength() > 0){utlStrToHex((BYTE*)&para, DebugPara.GetBuffer(), DebugPara.GetLength() / 2);return TRUE;}return FALSE;
}
BOOL WritePara()
{char DebugPara[4000] = {0};utlHexToStr(DebugPara, (BYTE*)&para, sizeof(para));if (WritePrivateProfileString("DEBUG", "DebugPara", DebugPara, configFileName)){return TRUE;}return FALSE;
}
BOOL CDlgLableDesign::OnInitDialog()
{CDialogEx::OnInitDialog();SetTimer(1, 100, NULL);ShowWindow(SW_MAXIMIZE);// 启用垂直滚动条SetScrollRange(SB_VERT, 0, MAX_SCROLL_POS); // 假设滚动范围是0到200//log位置自动长度CRect rect;GetDlgItem(IDC_EDIT_LOG2)->GetWindowRect(&rect);GetClientRect(&rect);rect.left = 8;rect.top = 70;rect.right = 8+195;rect.bottom = rect.bottom -10;GetDlgItem(IDC_EDIT_LOG2)->MoveWindow(&rect);return TRUE;  // return TRUE unless you set the focus to a control// 异常: OCX 属性页应返回 FALSE
}void CDlgLableDesign::OnBnClickedButtonPrintOutbox()
{CFileDialog fileDlg(TRUE, _T("bmp"), NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, _T("Bitmap Files (*.bmp)|*.bmp||"));if (fileDlg.DoModal() == IDOK){memset((char*) & para, 0, sizeof(para));memcpy(para.templateName, fileDlg.GetPathName().GetBuffer(), fileDlg.GetPathName().GetLength());WritePara();Log("加载模板:" + CString(para.templateName));LoadImageToPictureControl(para.templateName); // 加载图片}}void CDlgLableDesign::OnTimer(UINT_PTR nIDEvent)
{// TODO: 在此添加消息处理程序代码和/或调用默认值if (nIDEvent == 1){if (ReadPara()){if (strlen(para.templateName) > 0){Log("加载模板:" + CString(para.templateName));LoadImageToPictureControl(para.templateName); // 加载图片}}KillTimer(1); // 销毁定时器}CDialogEx::OnTimer(nIDEvent);
}//void CDlgLableDesign::OnMouseMove(UINT nFlags, CPoint point)
//{// TODO: 在此添加消息处理程序代码和/或调用默认值// 获取图片控件的位置和大小
//	CRect rect;
//	CStatic* pPictureControl = (CStatic*)GetDlgItem(IDC_STATIC_IMAGE);
//	pPictureControl->GetWindowRect(&rect);
//	ScreenToClient(&rect);
//// 计算鼠标相对于图片控件的坐标
//	int x = point.x - rect.left;
//	int y = point.y - rect.top;
//// 在log中输出坐标
//	CString str;
//	str.Format(_T("x: %d, y: %d"), x, y);
//
//
//// 判断点是否在矩形内
//	if (rect.PtInRect(point)) { 获取鼠标的当前位置//CPoint mousePos = point; 绘制水平和垂直辅助线//CClientDC dc(this);//CPen pen(PS_SOLID, 1, RGB(255, 0, 0)); // 红色辅助线//dc.SelectObject(&pen);//dc.MoveTo(mousePos.x, 0);//dc.LineTo(mousePos.x, rect.Height());//dc.MoveTo(0, mousePos.y);//dc.LineTo(rect.Width(), mousePos.y); 重绘图片控件//Invalidate();//CClientDC dc(this); 设置字体//CFont font;//font.CreatePointFont(100, _T("Arial"), &dc);//CFont* pOldFont = dc.SelectObject(&font); 使用TextOut函数在鼠标位置下方绘制文本//dc.TextOut(point.x, point.y + 20, str); 清除原来的文本CRect rect;GetClientRect(&rect);InvalidateRect(rect); 恢复原始字体//dc.SelectObject(pOldFont);Invalidate();
//	}//Log(str);
//	CDialogEx::OnMouseMove(nFlags, point);
//}void CDlgLableDesign::OnClickedStaticImage()
{::GetCursorPos(&para.point); // 获取当前鼠标位置ScreenToClient(&para.point); // 将屏幕坐标转换为窗口坐标ShowImage();
}
void CDlgLableDesign::ShowImage()
{LoadImageToPictureControl(para.templateName); // 加载图片// 获取图片控件的位置和大小CRect rect;CStatic* pPictureControl = (CStatic*)GetDlgItem(IDC_STATIC_IMAGE);pPictureControl->GetWindowRect(&rect);// 获取控件位置ScreenToClient(&rect); // 将屏幕坐标转换为窗口坐标// 计算鼠标相对于图片控件的坐标int x = para.point.x - rect.left;int y = para.point.y - rect.top;// 在log中输出坐标CString str;str.Format(_T("%d, %d "), x, y);Log(str);SetClipboard(str);//画辅助线CDC* pDC = GetDC();//CRect rect;//GetClientRect(&rect);// 保存当前DC状态int nSavedDC = pDC->SaveDC();DrawSomething(pDC, para.point.x, para.point.y);  //画一些别的东西// 设置ROP模式为R2_NOT,这样可以用相同的操作来清除线条//pDC->SetROP2(R2_NOT);CPen redPen;redPen.CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); // 1像素宽的实线,红色// 保存旧的画笔CPen* pOldPen = pDC->SelectObject(&redPen);// 绘制水平线pDC->MoveTo(rect.left, para.point.y);pDC->LineTo(rect.right, para.point.y);// 绘制垂直线pDC->MoveTo(para.point.x, rect.top);pDC->LineTo(para.point.x, rect.bottom);// 恢复旧的画笔pDC->SelectObject(pOldPen);// 恢复DC状态pDC->RestoreDC(nSavedDC);ReleaseDC(pDC);
}
BOOL CDlgLableDesign::DrawSomething(CDC* pDC,int x,int y)
{// 设置字体CFont font;LOGFONT lf;memset(&lf, 0, sizeof(LOGFONT));lf.lfHeight = para.fontHeight; // 字体大小lf.lfWeight = FW_HEAVY; // 加粗_tcscpy_s(lf.lfFaceName, ("黑体")); // 字体名称font.CreateFontIndirect(&lf);//font.CreatePointFont(240, "Arial", NULL);CFont* pOldFont = pDC->SelectObject(&font);SetBkMode(pDC->m_hDC, TRANSPARENT);pDC->TextOut(x, y, _T("DEV1"));pDC->SelectObject(pOldFont);return TRUE;
}BOOL CDlgLableDesign::PreTranslateMessage(MSG* pMsg)
{if (pMsg->message == WM_KEYDOWN){switch (pMsg->wParam){case VK_LEFT:para.point.x--;ShowImage();break;case VK_RIGHT:para.point.x++;ShowImage();break;case VK_UP:para.point.y--;ShowImage();break;case VK_DOWN:para.point.y++;ShowImage();break;case VK_PRIOR:case VK_OEM_MINUS:case VK_SUBTRACT:para.fontHeight--;Log("字高:"+ CString(to_string(para.fontHeight).c_str()));ShowImage();break;case VK_NEXT:case VK_OEM_PLUS:case VK_ADD:para.fontHeight++;Log("字高:" + CString(to_string(para.fontHeight).c_str()));ShowImage();break;default:break;}return TRUE;}return CDialogEx::PreTranslateMessage(pMsg);
}void CDlgLableDesign::OnClose()
{WritePara();CDialogEx::OnClose();
}
#pragma once
#include "afxdialogex.h"// CDlgLableDesign 对话框class CDlgLableDesign : public CDialogEx
{DECLARE_DYNAMIC(CDlgLableDesign)public:CDlgLableDesign(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CDlgLableDesign();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_DIALOG_LabelDesign };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:virtual BOOL OnInitDialog();afx_msg void OnBnClickedButtonPrintOutbox();afx_msg void OnTimer(UINT_PTR nIDEvent);//	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
//	afx_msg void OnPaint();
public:CEdit m_editDisplay;void Log(CString szInfo);BOOL CDlgLableDesign::DrawSomething(CDC* pDC, int x, int y);void CDlgLableDesign::ShowImage();BOOL LoadImageToPictureControl(CString pic);// 在对话框头文件中afx_msg void OnClickedStaticImage();
//	afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);virtual BOOL PreTranslateMessage(MSG* pMsg);afx_msg void OnClose();
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter 从登录接口提取cookie 并 跨线程组调用cookie (超详细)

文章目录 一、开始前的准备二、 业务场景介绍三、从登录接口提取cookies四、跨线程组调用cookies 一、开始前的准备 1、安装Jmeter&#xff0c;参考文章&#xff1a;JMeter 3.1 和JMeterPlugin的下载安装 2、设置配置文件使Cookie管理器保存cookie信息。 修改apache-jmeter-x…

PPT没保存怎么恢复?3个方法(更新版)!

“我刚做完一个PPT&#xff0c;正准备保存的时候电脑没电自动关机了&#xff0c;打开电脑后才发现我的PPT没保存。这可怎么办&#xff1f;还有机会恢复吗&#xff1f;” 在日常办公和学习中&#xff0c;PowerPoint是制作演示文稿的重要工具。我们会在各种场景下使用它。但有时候…

目标检测+车道线识别+追踪

一种方法&#xff1a; 车道线检测-canny边缘检测-霍夫变换 一、什么是霍夫变换 霍夫变换&#xff08;Hough Transform&#xff09;是一种在图像处理和计算机视觉中广泛使用的特征检测技术&#xff0c;主要用于识别图像中的几何形状&#xff0c;尤其是直线、圆和椭圆等常见形状…

ssm小区车库停车系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm小区车库停车系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…

持续集成与版本控制的相关概念

目录 一、持续集成 1.1 持续集成基本概念 1.1.1 持续集成的含义 1.1.1.1 持续集成流程是依赖产品版本迭代和版本分支而产生的 1.1.1.2 持续集成流程中包含的内容 1.1.2 传统打包模式说明 1.1.2.1 传统打包模式概述 1.1.2.2 传统打包模式问题 1.1.3 持续集成模式 1.1.…

day70 Mybatis使用mapper重构xml文件重新修改商品管理系统

day67 基于mysql数据库jdbcDruidjar包连接的商品管理用户购物系统-CSDN博客 1多表操作 2动态SQL 项目中使用的为商品管理系统的表 一 查询商品信息 编号&#xff0c;名称&#xff0c;单价&#xff0c;库存&#xff0c;类别 1表&#xff1a;商品表&#xff0c;类别表 n对1…

java图书管理系统(简易)

实现的基本功能&#xff1a; 登录时&#xff0c;需要输入姓名&#xff0c;然后选择作为管理者还是普通用户。选择成功后选择想要实现的功能。管理者的目录下方有有五个功能&#xff0c;而普通用户有4个功能&#xff0c;如下图 首先我们要建立Book这个类&#xff0c;里面包含书…

sqlite跨数据库复制表

1.方法1 要将 SQLite 数据库中的一个表复制到另一个数据库&#xff0c;您可以按照以下步骤操作&#xff1a; 备份原始表的SQL定义和数据&#xff1a; 使用 sqlite3 命令行工具或任何SQLite图形界面工具&#xff0c;您可以执行以下SQL命令来导出表的SQL定义和数据&#xff1a…

算法打卡day19

今日任务&#xff1a; 1&#xff09;235. 二叉搜索树的最近公共祖先 2&#xff09;701.二叉搜索树中的插入操作 3&#xff09;450.删除二叉搜索树中的节点 235. 二叉搜索树的最近公共祖先 题目链接&#xff1a;235. 二叉搜索树的最近公共祖先 - 力扣&#xff08;LeetCode&…

Adobe推出20多个,企业版生成式AI定制、微调服务

3月27日&#xff0c;全球多媒体领导者Adobe在拉斯维加斯召开“Summit 2024”大会&#xff0c;重磅推出了Firefly Services。 Firefly Services提供了20 多个生成式AI和创意API服务&#xff0c;支持企业自有数据对模型进行定制、微调&#xff0c;同时可以与PS、Illustrator、Ex…

华为开源自研AI框架昇思MindSpore应用案例:梯度累加

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 二、案例实现 梯度累加的训练算法&#xff0c;目的是为了解决由于内存不足&#xff0c;导致Batch size过大神经网络无法训练&#xff0c;或者网络模型过大无法加载的OOM&#xff08;Out Of Memory&#xff…

Learn OpenGL 26 视差贴图

什么是视差贴图 视差贴图(Parallax Mapping)技术和法线贴图差不多&#xff0c;但它有着不同的原则。和法线贴图一样视差贴图能够极大提升表面细节&#xff0c;使之具有深度感。它也是利用了视错觉&#xff0c;然而对深度有着更好的表达&#xff0c;与法线贴图一起用能够产生难…

uniapp写小程序如何实现分包

众所众知小程序上传的过程中对包的大小有限制&#xff0c;正常情况下不允许当个包超过2M&#xff0c;所以需要分包 需要再pages.json这个文件夹中进行配置 "pages": [{"path": "pages/index/index","style": {"navigationBarTit…

备考ICA----Istio实验11---为多个主机配置TLS Istio Ingress Gateway实验

备考ICA----Istio实验11—为多个主机配置TLS Istio Ingress Gateway实验 1. 部署应用 kubectl apply -f istio/samples/helloworld/helloworld.yaml -l servicehelloworld kubectl apply -f istio/samples/helloworld/helloworld.yaml -l versionv12. 证书准备 接上一个实验…

计算机网络:物理层 - 信道复用

计算机网络&#xff1a;物理层 - 信道复用 频分复用时分复用统计时分复用波分复用码分复用 计算机网络中&#xff0c;用户之间通过信道进行通信&#xff0c;但是信道是有限的&#xff0c;想要提高网络的效率&#xff0c;就需要提高信道的利用效率。因此计算机网络中普遍采用信道…

笔记本作为其他主机显示屏(HDMI采集器)

前言&#xff1a; 我打算打笔记本作为显示屏来用&#xff0c;连上工控机&#xff0c;这不是贼方便吗 操作&#xff1a; 一、必需品 HDMI采集器一个 可以去绿联买一个&#xff0c;便宜的就行&#xff0c;我的大概就长这样 win10下载 PotPlayer 软件 下载链接&#xff1a;h…

ClickHouse11-ClickHouse中文件引擎与物化视图的组合拳

全文概览&#xff1a; 什么是物化视图 使用场景 如何实现这个需求 建立一个使用表引擎的表&#xff0c;作为物化视图的目标表确定需要查询的SQL创建物化视图测试 文件引擎其实是一个不常用的特殊表引擎&#xff0c;结合【ClickHouse09-表引擎之文件引擎】一章节的基础介绍 这…

Flutter 常用插件Plugin整理并附带实例

最近有点空闲时间&#xff0c;正好写一篇文章&#xff0c;整理一下我们在Flutter开发中常用的插件Plugin使用并附带上实例。 在日常开发中&#xff0c;整个demo目前应该满足大家所有的开发需求&#xff0c;例如&#xff1a;http请求、列表刷新及加载、列表分组、轮播图、视频播…

AI浪潮席卷游戏业:未来5~10年,游戏或将由AI生成

一年前&#xff0c;因为AI失业的第一批人&#xff0c;在游戏行业出现了。游戏原画、翻译等外包团队开始遭遇砍单&#xff0c;AI绘画工具的发展速度和水平已经几乎可以媲美科班出身、初级经验的人类画师。 一年时间过去&#xff0c;在游戏制作的毛细血管中&#xff0c;越来越多…

SpringBoot3的RabbitMQ消息服务

目录 预备工作和配置 1.发送消息 实现类 控制层 效果 2.收消息 3.异步读取 效果 4.Work queues --工作队列模式 创建队列text2 实体类 效果 5.Subscribe--发布订阅模式 效果 6.Routing--路由模式 效果 7.Topics--通配符模式 效果 异步处理、应用解耦、流量削…