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 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.mfbz.cn/a/492560.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用docker-compose搭建wordpress博客

1、从远程仓库拉取worldpress镜像到本地 2、新建一个项目&#xff0c;然后在新建的项目目录里面新建一个docker-compose.yml模版文件。 3、编写docker-compose.yml文件 4、docker-compose up 运行项目。 5、在浏览器测试 使用docker-compose搭建wordpress博客实验成功。

过滤器 Filter

目录 1、Filter是什么 2、原理 3、怎样使用 步骤&#xff1a; Filter的执行流程&#xff1a; 拦截路径配置&#xff1a; 配置方式&#xff1a; 过滤器链&#xff1a; 1、Filter是什么 Filter是一个在计算机中用于筛选、过滤和修改数据的组件或模块。它在数据传输和处理…

python入门题:输入输出练习

以下是Python基础语法的练习&#xff0c;项目要求和代码如下&#xff1a; """ 例3&#xff1a;小精灵&#xff1a;你好&#xff0c;欢迎古灵阁&#xff0c;请问您需要帮助吗&#xff1f;需要or不需要&#xff1f; 你&#xff1a;需要 小精灵&#xff1a;请问你需…

python 中判断文件、目录是否存在的方法

判断目录是否存在并创建目录 一、实现上传文件功能二、判断目录是否存在的办法2.1、使用os模块2.1.1、判断目录是否存在2.1.2、os.makedirs()&#xff1a;递归创建目录 2.2、使用pathlib模块2.2.1、path.exist()判断目录是否存在2.2.1、path.mkdir()&#xff1a;创建目录 2.3、…

深入聊聊企业数字化转型这个事儿

01 什么是数字化&#xff1f; 聊数字化&#xff0c;就不得不聊聊信息化、智能化。佛性的说&#xff1a;信息化是数字化的前世&#xff0c;智能化是数字化的来生&#xff01;我习惯用一个结构化的图形来表示事物之间的关系&#xff0c;信息化、数字化、智能化的关系如下&#…

后端基础篇- 社区 IDEA 手动 Maven 创建 SpringBoot 项目、Maven 安装与配置环境变量、IDEA 集成 Maven

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Maven 安装与配置环境变量 1.1 下载并解压安装包 1.2 配置本地仓库 1.3 配置阿里云私服 1.4 配置环境变量 2.0 IDEA 集成 Maven 2.1 首先创建一个新项目 2.2 开始…

Unity编辑器功能 将选中的文件夹复制一份到其他文件夹

[MenuItem("Ab包工具/将选中的文件移动到StreamingAssets文件夹下")] public static void MoveFireToStreamA() { //得到选中文件的数组 Object[] selectobj Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets); i…

【数据结构初阶】之堆(C语言实现)

数据结构初阶之堆&#xff08;C语言实现&#xff09; &#x1f30f; 堆的概念&#x1f30f; 堆的模拟实现&#x1f413; 堆的结构和方法接口&#x1f413; 堆的方法的模拟实现&#x1f64a; 堆的初始化&#x1f64a; 堆的构建&#x1f64a; 堆的插入&#x1f64a; 向上调整&…

sentinel热点参数流控

1、概念 热点参数限流会统计传入参数中的热点参数&#xff0c;并根据配置的限流阈值与模式&#xff0c;对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制&#xff0c;仅对包含热点参数的资源调用生效。 2、示例 2.1、目的 对于如下的/get接口的参…

【正点原子FreeRTOS学习笔记】————(13)队列集

这里写目录标题 一、队列集简介&#xff08;了解&#xff09;二、队列集相关API函数介绍&#xff08;熟悉&#xff09;三、队列集操作实验&#xff08;掌握&#xff09; 一、队列集简介&#xff08;了解&#xff09; 一个队列只允许任务间传递的消息为同一种数据类型&#xff…

鸿蒙开发之了解ArkTS

鸿蒙开发者官网 &#xff1a; https://developer.huawei.com/consumer/cn/ 开发鸿蒙要用的软件是 DevEco Studio ArkTS建立在JS和TS的基础之上&#xff0c;扩展了声明式UI开发范式和状态管理&#xff0c;提供更简洁和自然的开发方式。 ArkTS引入了渲染引擎的增强&#xff0c…

centos7 linux下yum安装redis

安装redis 1.检查是否有redis yum 源 yum install redis2.下载fedora的epel仓库 yum install epel-release3.安装redis数据库 yum install redis4.安装完毕后&#xff0c;使用下面的命令启动redis服务 # 启动redis service redis start# 停止redis service redis stop# 查…

UOS、Linux下的redis的详细部署流程(适用于内网)

提示&#xff1a;适用于Linux以及UOS等内外网系统服务器部署。 文章目录 一.上传离线包二.部署基本环境三.解压并安装redis四.后台运行redis五.uos系统可能遇到的问题六.总结 一.上传离线包 1.自己去Redis官网下载适配自己部署系统的redis安装包。 2.通过文件传输工具&#xf…

精酿啤酒屋:畅饮与文化的交汇点

在城市的繁华之中&#xff0c;Fendi Club啤酒屋犹如一颗璀璨的明珠&#xff0c;吸引着无数寻求文化与享受的人们。它不仅仅是一个提供美酒佳肴的地方&#xff0c;更是一个文化和社交的交汇点。 走进Fendi Club&#xff0c;你会被它与众不同的环境所吸引。暗色调的装饰风格&…

Python机器学习赋能GIS:地质灾害风险评价的新方法论

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…

NO11 蓝桥杯单片机之DS18B20数字温度计

DS18B20数字温度计这个模块和以往单片机学习的模块可能不同&#xff0c;这里还要知道其头文件&#xff08;.h&#xff09;和.c文件代码的理解。 具体这个温度计是怎么实现检测温度的&#xff0c;呃呃呃呃呃这可能就要去查阅专业资料&#xff0c;涉及的知识体系应该很庞大&…

ABNDP: Co-optimizing Data Access and Load Balance in Near-Data Processing——论文泛读

ASPLOS 2023 Paper 论文阅读笔记整理 问题 近数据处理&#xff08;NDP&#xff09;是一种很有前途的体系结构范式&#xff0c;可以解决数据密集型应用程序的内存墙挑战。基于3D堆叠存储器的典型NDP系统包含大量并行处理单元&#xff0c;每个并行处理单元都可以访问其本地存储…

YOLOv9改进策略:block优化 | SEAM提升小目标遮挡物性能

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;SEAM提升小目标遮挡物性能&#xff0c;在多个数据集得到很好的验证 改进结构图如下&#xff1a; YOLOv9魔术师专栏 ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️ ☁️☁️☁️…

Github实现push触发自动构建(包括提交代码到另一个仓库中和发布npm)

将指定内容自动更新到另一个代码仓库中 登录https://github.com&#xff0c;创建Personal access token&#xff1a; &#xff08;1&#xff09;github右上角&#xff0c;点击头像&#xff0c;进入Settings > Developer settings > Personal access tokens 下面的Tokens …

一名00后程序员初次使用低代码开发平台的感受

前言 大家好&#xff0c;我是小代&#xff0c;一名00后的Java后端开发工程师。我热爱编程&#xff0c;希望通过写博客来分享我的学习经验和心得。最近&#xff0c;我加入了一家专注于低代码开发平台的公司&#xff0c;这里的技术挑战和新颖性让我决定开始我的博客之旅。 工作…