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

news2024/12/25 9:34:20

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

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

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

在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 2000

typedef 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);

		// 获取控件的DC
		CDC* pDC = pPictureControl->GetDC();
		if (pDC == nullptr)
			return FALSE;

		// 创建兼容DC
		CDC dcImage;
		if (!dcImage.CreateCompatibleDC(pDC))
			return FALSE;

		// 选择图片到DC
		CBitmap 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_TIME
	enum { IDD = IDD_DIALOG_LabelDesign };
#endif

protected:
	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.coloradmin.cn/o/1549762.html

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

相关文章

sheng的学习笔记-AI-YOLO算法,目标检测

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录 目标定位&#xff08;Object localization&#xff09; 定义 原理图 具体做法&#xff1a; 输出向量 图片中没有检测对象的样例 损失函数 ​编辑 特征点检测&#xff08;Landmark detection&#xff09; 定义&a…

【数据结构】计数排序

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解计数排序&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 基本思想二. 计数排序代码 一. 基本思想 计数排序又称为鸽巢原理&#xff0c;是对哈希直…

Jenkins磁盘空间批量清理脚本

一、简介 Jenkins如果没有设置保留构建历史数&#xff0c;磁盘会随着使用次数增加而越来越满&#xff0c;于是需要批量清理一下。 二、清理脚本 找到Script Console 输入脚本&#xff0c;并点击执行&#xff0c;需要注意期望删除的构建历史编号&#xff08;可以查看下面的效果…

第二篇:3.1 广告印象(AD Impression) - IAB与MRC及《增强现实广告效果测量指南1.0》

--- 我为什么要翻译美国IAB科技公司系列标准 翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇广告效果测量定义和其他矩阵之- 3.2 可见度 …

ip协议和数据链路层!

今天我们来学ip协议&#xff01; 如果我们想要两台主机之间能够通信必须知道双方的ip地址才能进行标识对方然后进行通信&#xff01; 首先是4位首部长度&#xff0c;与tcp同理*4才是报头的真实大小&#xff01;&#xff08;即20-60&#xff09;&#xff08;最低开始读20&#x…

【OpenCV】 OpenCV (C++) 与 OpenCvSharp (C#) 之间数据通信

OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C 类构成&#xff0c;同时提供了Python、Ruby、MATLAB等语…

MySQL中使用distinct单、多字段去重方法

目录 一、distinct 1.1 只对一个字段查重 1.2多个字段去重 1.3针对null处理 1.4与distinctrow同义 二、聚合函数中使用distinct 三、CONCAT_WS函数 多个字段拼接去重是指将多个字段的值按照一定的规则进行拼接&#xff0c;并去除重复的拼接结果。这样可以生成唯一标识符…

蓝桥杯刷题day10——猜灯谜【算法赛】

一、问题描述 在元宵节的活动现场&#xff0c;有一串环形排列的灯笼&#xff0c;共计 n 个。每个灯笼上伴随着一个谜底以及一个数字&#xff0c;这些数字分别为 a1,a2 ,…,an。 根据元宵节的传统&#xff0c;每个灯笼的谜底都是由相邻两个灯笼上的数字之和得出的。需要注意的…

勾八头歌之分类回归聚类

一、机器学习概述 第1关机器学习概述 B AD B BC 第2关常见分类算法 #编码方式encodingutf8from sklearn.neighbors import KNeighborsClassifierdef knn(train_data,train_label,test_data):input:train_data用来训练的数据train_label用来训练的标签test_data用来测试的数据…

R 生存分析3:Cox等比例风险回归及等比例风险检验

虽然Kaplan-Meier分析方法目前应用很广&#xff0c;但是该方法存在一下局限: 对于一些连续型变量&#xff0c;必须分类下可以进行生存率对比 是一种单变量分析&#xff0c;无法同时对多组变量进行分析 是一种非参数分析方法&#xff0c;必须有患者个体数据才能进行分析 英国…

春秋云境CVE-2023-27179

简介 GDidees CMS v3.9.1及更低版本被发现存在本地文件泄露漏洞&#xff0c;漏洞通过位于 /_admin/imgdownload.php 的 filename 参数进行利用。 正文 进入靶场发现没有什么可以利用的地方&#xff0c;那么就按照靶场提示来&#xff0c;直接访问/_admin/imgdownload.php 打开…

鸿蒙雄起!风口就在当下,你如何抉择?

近年来&#xff0c;华为自主研发的鸿蒙操作系统&#xff08;HarmonyOS&#xff09;引起了广泛的关注和讨论。鸿蒙系统不仅标志着华为在软件领域的一次重大突破&#xff0c;也预示着全球智能设备市场格局的潜在变化。本文将深入探讨鸿蒙系统的兴起、其在市场上的表现以及对程序员…

【SQL】1633. 各赛事的用户注册率(COUNT函数 表达式用法)

题目描述 leetcode题目&#xff1a;1633. 各赛事的用户注册率 Code select contest_id, round(count(*)/(select count(*) from Users)*100, 2) as percentage from Register group by contest_id order by percentage desc, contest_id ascCOUNT()函数 COUNT函数用法&#…

k8s入门到实战(十一)—— DaemonSet详细介绍及使用

DaemonSet 说明 是个 Pod 控制器能够确保 k8s 的所有节点都运行一个相同的 pod 副本,假设这个 pod 名称为 pa 当增加 node 节点时&#xff0c;这个节点会自动创建一个 pa副本当删除 node 节点时&#xff0c;pa 副本会自动删除 删除 daemonset 会删除它们创建的 pod 使用场景 需…

PyQt:实现自定义绘制pyqtgraph折线图中的symbol图标

一、写在前面 1.关于symbol的官方文档说明&#xff1a;symbol 2.我自己绘制的自定义symbol符号&#xff0c;如下图&#xff1a;一个在坐标轴上移动的“小货车” 2.默认可以选择的有以下多种symbol符号 但最后一项也说明了&#xff1a;支持QPainterPath绘制的自定义符号形状。…

案例分析-IEEE 754浮点标准

案例一&#xff1a; 请分析IEEE 754双精度浮点数规格化数的表示范围。 案例二&#xff1a; 规格化浮点数的Bias为什么采用2k-1-1而不是2k-1​&#xff1f;非规范数的指数E1-Bias而不是0-Bias&#xff1f; &#xff08;1&#xff09; ① bias 127时 E e - 127 &#xff08;00…

0.96寸OLED屏调试 ----(一)

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、0.96寸OLED显示模块&#xff1b; 备注&#xff1a;专业版、升级版都适用&#xff1b; 首先介绍一下OLED显示模块&#xff0c;SSD1306是一款OLED驱动芯片&#xff0c;拥有最大128*64像素支持&#xff…

卷积变体-----分组卷积、深度可分离卷积、膨胀卷积

文章目录 一、分组卷积1.1 概述1.2 参数量变换 二、深度可分离卷积2.1 概述2.2 计算 三、膨胀卷积 一、分组卷积 1.1 概述 1. 分组卷积&#xff08;Group convolution &#xff09;最早在AlexNet中出现&#xff0c;由于当时的硬件资源有限&#xff0c;训练AlexNet时卷积操作不…

Axure中后台系统原型模板,B端页面设计实例,高保真高交互54页

作品概况 页面数量&#xff1a;共 50 页&#xff08;长期更新&#xff09; 兼容版本&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;网页模板、网站后台、中台系统、B端系统 作品特色 本品为「web中后台系统页面设计实例模板」&#xff0c;默林原创…

聊聊CSS

css 的介绍 学习目标 能够知道css的作用 1. css 的定义 css(Cascading Style Sheet)层叠样式表&#xff0c;它是用来美化页面的一种语言。 没有使用css的效果图 使用css的效果图 2. css 的作用 美化界面, 比如: 设置标签文字大小、颜色、字体加粗等样式。 控制页面布局, 比如…