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

2502,索界面3

原文

SonicUI,你从未见过的方便GUI引擎-源码

介绍

SonicUI是基于原生GDIAPIGUI引擎.它提供了几个简单的UI组件来实现高效的UI效果,如自绘按钮,不规则窗口,动画,窗口中的网径图像操作方法.
主要目的是用最少的代码来达到最佳效果.

背景

周知,UI开发一般重复用无趣.因此,设计此引擎遵守了两个原则:易于使用和高效.看看下面引擎的用法,和一些有趣的要点.

使用代码

首先,让我介绍类工厂和组件管:ISonicUI.用此接口来创建和析构对象,并用作某些全局函数.

1.显示和旋转图像

图像操作接口:ISonicImage,用来加载,保存,旋转,拉伸,灰度HSL调整等.感谢CxImage的作者,我使用此库来避免编码或解码多种图像格式.

但是,在由CxImage加载图像并按标准dib格式转换后,我自己处理它们.ISonicImage用法很简单:

ISonicImage * pImg = GetSonicUI()->CreateImage();
pImg->Load("C:\\demo.png");
pImg->Rotate(90);
pImg->Draw(hdc);

2.制作一个网径

使用某些控件输出彩色,或向窗口添加网径可能很无聊.使用原生GDIAPI,你必须不断地选择不同字体或其他GDI对象进出dc.

但是,使用ISonicString,你只需三到四行就可干活.

ISonicString * pStr = GetSonicUI()->CreateString();
pStr->Format("/a='http://hi.csdn.net/zskof', c=%x/Hello I'm a clik", RGB(0, 0, 255));
pStr->TextOut(hdc, 10, 10);

注意:不要在WM_PAINT过程中创建ISonicString设置其格式,以避免重复初化,及在BeginPaint()EndPaint()间放置pStr->TextOut()方法.

是的,在没有在窗口中放置控件,或不关心无聊的分发消息时,仅需三行即可构成一个网径,这似乎是不可能的吗?嗯,这只是子类的把戏.

这样,你可让你的代码超文本代码一样简单.你唯一要参加的是ISonicString的关键字.你可在ISonicUI.h接口文件中找到特定的说明.

3.制作动画自绘按钮

UI人,也很熟悉自定义按钮.使用ISonicString,可轻松创建漂亮的按钮,只与创建网径稍有不同.

void WINAPI OnMove(ISonicString * pStr, LPVOID)
{...
}ISonicImage * pImgNormal = GetSonicUI()->CreateImage();
pImgNormal->Load(BMP_NORMAL);
pImgNormal->SetColorKey(RGB(255, 0, 255));ISonicImage * pImgHover = GetSonicUI()->CreateImage();
pImgHover->Load(BMP_HOVER);
pImgHover->SetColorKey(RGB(255, 0, 255));ISonicImage * pImgClick = GetSonicUI()->CreateImage();
pImgClick->Load(BMP_CLICK);
pImgClick->SetColorKey(RGB(255, 0, 255));ISonicString * pAniButton = GetSonicUI()->CreateString();
pAniButton->Format("/a, p=%d, ph=%d, pc=%d, animation=40/",pImgNormal->GetObjectId(), pImgHover->GetObjectId(), pImgClick->GetObjectId());
pAniButton->Delegate(DELEGATE_EVENT_CLICK, NULL, NULL, OnMove);
pAniButton->TextOut(hdc, 10, 10);

"p,ph,pc"关键字代表按钮的三个状态(正常,移过,点击).每个关键字按其显示项,指定一个ISonicImage.如果你取得一个包含三个状态源图像,则也没有关系.

只需要按ISonicImage的相同对象ID指定"p,ph,pc",ISonicImage会完成所有操作.内部就搞了源剪切.

"animation=40"表示这是一个阴影按钮,即,在切换状态显示动画.40阴影速度,越高,速度越快.Delegate()方法给按回调转发点击事件的过程,然后,如果你点击按钮,则调用该过程.

4.制作不规则窗口

ISonicWndEffect组件用来造不规则窗口,或给窗口加动画,如平滑移动,平滑旋转或平滑拉伸等.制作不规则窗口的方法有两个:使用窗口区域分层窗口.
首先是窗口区域方式:

...
// ISonicImage * pImg
SetWindowRgn(hWnd, pImg->CreateRgn());

第二个是使用分层窗口:

...
ISonicWndEffect * pEffect = GetSonicUI()->CeateWndEffect();
// 用α每像素附加模式
pEffect->Attach(hWnd, TRUE);
// ISonicImage * pImg
pEffect->SetShapeByImage(pImg);

5.其他组件

还有许多其他组件,如ISonicTextScrollBarISonicAnimation,你可用它们实现许多熟悉的UI效果,如滚动文本,平滑移动图片,旋转或平滑拉伸并很爽.

用法非常简单,可在ISonicUI.h接口文件中查找它.在此,这里说下兴趣点.

兴趣点

这里展示一些包含ASMAPI勾挂技术的技巧.

1.闭包

当然,希望找到简单方法来给不同过程转发自绘按钮,以可普遍使用组件.但是函数声明中有问题.VC禁止你按普通方式按参数,传递类的成员函数.

你必须使用与类相关成员函数指针,且显然违反"通用"原则.因此,我使用易失参数来避免该限制.

void ISonicBase::Delegate(UINT message, LPVOID pReserve, LPVOID pClass, ...)
{if(IsValid() == FALSE){return;}ISonicBaseData * pData = dynamic_cast(this);if(pData == NULL){return;}DELEGATE_PARAM pm = {0};pm.pClass = pClass;pm.pReserve = pReserve;va_list argPtr;va_start(argPtr, pClass);pm.pFunc = va_arg(argPtr, LPVOID);va_end(argPtr);pData->m_mapDelegate[message] = pm;
}

而且也无法正常回调.不用担心,只需一点ASM代码即可完成工作.

void ISonicBaseData::OnDelegate(UINT message)
{MSG_TO_DELEGATE_PARAM::iterator it = m_mapDelegate.find(message);if(it == m_mapDelegate.end()){return;}DELEGATE_PARAM &pm = it->second;if(pm.pFunc == NULL || IsBadCodePtr((FARPROC)pm.pFunc)){return;}ISonicBase * pBase = dynamic_cast(this);if(pBase == NULL){return;}LPVOID pReserve = pm.pReserve;LPVOID pClass = pm.pClass;LPVOID pFunc = pm.pFunc;__asm{push ecxpush [pReserve]push [pBase]mov ecx, [pClass]call [pFunc]pop ecx}
}

有时,这破坏了C++语法检查的安全性,因此必须确保回调函数的声明严格遵守以下规则:

void WINPAI Func(ISonicBase *, LPVOID)

否则,会导致栈崩溃某些致命错误.

2.分层窗口

广泛使用分层窗口来实现透明窗口或不规则窗口.有两个用来显示分层窗口API:SetLayeredWindowAttributesUpdateLayeredWindow.

但是,尽管如MSDN所述,SetLayeredWindowAttributes内部使用UpdateLayeredWindow,但对应用开发者来说,这两个函数之间有致命的区别.

在此,只能说主要区别是使用UpdateLayeredWindow时,会丢弃WM_PAINT消息,不会显示你的所有子控件,且通用的GDIAPI可能无法正常工作,而SetLayeredWindowAttributes使用重定向机制来使一切正常运行.

似乎UpdateLayeredWindow只是一个麻烦制造者,但是如果你要创建一个每像素α窗口并按背景使用PNG实现某些阴影效果,则只能选择UpdateLayeredWindow.

因为ISonicWndEffect只是,在现有窗柄上附加的"附件",我该如何要求引擎用户重写BeginPaintEndPaint间的所有渲染代码?因此,我使用了API勾挂技巧.

// ...HMODULE hMod = GetModuleHandle("User32.dll");if(hMod == NULL){return FALSE;}m_pOldBeginPaint = ReplaceFuncAndCopy(GetProcAddress(hMod, "BeginPaint"), MyBeginPaint);m_pOldEndPaint = ReplaceFuncAndCopy(GetProcAddress(hMod, "EndPaint"), MyEndPaint);HDC CSonicUI::MyBeginPaint( HWND hwnd, LPPAINTSTRUCT lpPaint )
{HDC hdc;if(m_hPaintDC){memset(lpPaint, 0, sizeof(PAINTSTRUCT));lpPaint->hdc = m_hPaintDC;GetClientRect(hwnd, &lpPaint->rcPaint);hdc = m_hPaintDC;g_UI.m_rtUpdate = lpPaint->rcPaint;}else{GetUpdateRect(hwnd, g_UI.m_rtUpdate, FALSE);__asm{push [ebp + 0ch]push [ebp + 8h]call [m_pOldBeginPaint]mov [hdc], eax}}g_UI.m_bPainting = TRUE;return hdc;
}BOOL CSonicUI::MyEndPaint( HWND hWnd, CONST PAINTSTRUCT *lpPaint )
{BOOL bRet = TRUE;// ...if(m_hPaintDC){m_hPaintDC = NULL;return TRUE;}else{__asm{push [ebp + 0ch]push [ebp + 8h]call [m_pOldEndPaint]mov [bRet], eax}}GetClientRect(hWnd, g_UI.m_rtUpdate);g_UI.m_bPainting = FALSE;return bRet;
}

这样,当我想使用(内部由UpdateLayeredWindow实现的)每像素α模式重画ISonicWndEffect附加的窗口时,我只是向窗口发送了假WM_PAINT消息,并按WM_PAINT字参使用memdc,无需更改渲染代码正确渲染了.

实际上,使用此技巧带来为一些礼物.使用此引擎时,即使隐藏了窗口,也可在指定memdc绘画所有窗口.

结论

还有许多其他技巧和技术,如按转换运算,更新脏矩形机制,SSE2指令等,以优化引擎效率.

历史

更改了函数勾挂代码,以避免泄漏内存警告.修改了CSonicString::TextOut一些代码,使其可与内存dc一起使用,而无需指定窗柄.给ISonicImage添加了高斯模糊甚至模糊功能.

修复了ISonicImage中的可能导致崩溃服务器错误.给ISonicWndEffect添加DirectTransfrom方法.给ISonicTextScrollBar添加了一些功能.

添加了ISonicSkin组件.可仅用三行代码装饰窗口和对话框.很酷,很方便!添加了统一支持,添加了静态库输出支持.
几种类型从MFC,更改为ATL支持,以减轻引擎重量.优化了一些内核工具,如脏矩形更新机制.
ISonicUIISonicString添加了接口,ISonicString中修改了"p"关键字的格式.

这是一个制作带四种状态平铺图像的自绘按钮示例:

ISonicString::Format("/a, p4=%d/", pImg->GetObjectId());

丢弃原来的"ph""pc"关键字.见ISonicUI.h获取更多细节.

相关文章:

2502,索界面3

原文 SonicUI,你从未见过的方便GUI引擎-源码 介绍 SonicUI是基于原生GDIAPI的GUI引擎.它提供了几个简单的UI组件来实现高效的UI效果,如自绘按钮,不规则窗口,动画,窗口中的网径和图像操作方法. 主要目的是用最少的代码来达到最佳效果. 背景 周知,UI开发一般重复用无趣.因此…...

基础笔记|splice()的用法

一、三种用法 splice(index, 0, element) 插入 元素,不删除任何元素。splice(index, deleteCount) 删除 deleteCount 个元素。splice(index, deleteCount, element1, element2, ...) 替换 元素,即删除 deleteCount 个元素,同时插入新的元素。…...

电商项目高级篇09-检索服务

电商项目高级篇09-检索服务 1、环境搭建1.1、前端静态文件准备1.2、search服务引入模版引擎1.3、index.html页面复制到templates文件夹下1.4、模仿product项目,引入名称空间1.5、动静分离,静态资源路径位置替换1.6、将1.1的静态资源放到nginx目录下1.7、…...

如何使用 DeepSeek 和 Dexscreener 构建免费的 AI 加密交易机器人?

我使用DeepSeek AI和Dexscreener API构建的一个简单的 AI 加密交易机器人实现了这一目标。在本文中,我将逐步指导您如何构建像我一样的机器人。 DeepSeek 最近发布了R1,这是一种先进的 AI 模型。您可以将其视为 ChatGPT 的免费开源版本,但增加…...

Meta财报解读:营收超预期,用户增长放缓,AI与元宇宙仍是烧钱重点

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

2024美团秋招硬件开发笔试真题及答案解析

目录 一、单选题 1、C语言中变量有一系列的命名规则,下列选项中,属于错误的C语言变量命名规则的是() 2、以下 C 代码的运行结果是什么() 3、执行下面程序,正确的输出是() 4、以下不正确的定义语句是() 5、执行语句for (i = 2; i++ < 7;);后, i 的值变为()…...

利用Vue编写一个“计数器”

目录 一、利用Vue编写一个“计数器”的操作方法&#xff1a;二、html文件相关源代码三、CSS文件相关源代码四、代码执行效果展示如下 一、利用Vue编写一个“计数器”的操作方法&#xff1a; 1、data中定义计数器的相关数据&#xff0c;如num、min、max。 2、methods中添加计数…...

vscode搭建git

vscode搭建git 一、安装git二、vscode上搭建git(1) 先创建本地仓库再上传到远程仓库&#xff0c;远程仓库名是根据本地仓库名一致(2) 先创建远程仓库&#xff0c;再将本地仓库上传到指定远程仓库 一、安装git 网络教程很多&#xff0c;在此就不赘述了 参考&#xff1a;git安装…...

Dijkstra算法解析

Dijkstra算法&#xff0c;用于求解图中从一个起点到其他所有节点的最短路径。解决单源最短路径问题的有效方法。 条件 有向 带权路径 时间复杂度 O&#xff08;n平方&#xff09; 方法步骤 1 把图上的点分为两个集合 要求的起点 和除了起点之外的点 。能直达的写上权值 不…...

本地部署DeepSeek教程(Mac版本)

第一步、下载 Ollama 官网地址&#xff1a;Ollama 点击 Download 下载 我这里是 macOS 环境 以 macOS 环境为主 下载完成后是一个压缩包&#xff0c;双击解压之后移到应用程序&#xff1a; 打开后会提示你到命令行中运行一下命令&#xff0c;附上截图&#xff1a; 若遇…...

蓝桥杯算法笔记|差分学习

&#xff01;前情回顾 前缀和18437蓝桥账户中心 练习代码&#xff1a; #include <iostream> using namespace std; int main() {// 请在此输入您的代码int n,q;cin>>n>>q;int a[n];for(int i0;i<n;i){cin>>a[i];}int sum[n];sum[0]a[0];for(int …...

一文速览DeepSeek-R1的本地部署——可联网、可实现本地知识库问答:包括671B满血版和各个蒸馏版的部署

前言 自从deepseek R1发布之后「详见《一文速览DeepSeek R1&#xff1a;如何通过纯RL训练大模型的推理能力以比肩甚至超越OpenAI o1(含Kimi K1.5的解读)》」&#xff0c;deepseek便爆火 爆火以后便应了“人红是非多”那句话&#xff0c;不但遭受各种大规模攻击&#xff0c;即便…...

【Redis】主从模式,哨兵,集群

主从复制 单点问题&#xff1a; 在分布式系统中&#xff0c;如果某个服务器程序&#xff0c;只有一个节点&#xff08;也就是一个物理服务器&#xff09;来部署这个服务器程序的话&#xff0c;那么可能会出现以下问题&#xff1a; 1.可用性问题&#xff1a;如果这个机器挂了…...

结构体排序 C++ 蓝桥杯

成绩排序 #include<iostream> #include<algorithm> using namespace std; struct stu {string name;//名字int grade;//成绩 }; stu a[30]; bool cmp(stu l, stu r) {if (l.grade ! r.grade) return l.grade > r.grade;return l.name < r.name; } int main()…...

【通俗易懂说模型】线性回归(附深度学习、机器学习发展史)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;深度学习_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...

Haproxy+keepalived高可用集群,haproxy宕机的解决方案

Haproxykeepalived高可用集群&#xff0c;允许keepalived宕机&#xff0c;允许后端真实服务器宕机&#xff0c;但是不允许haproxy宕机&#xff0c; 所以下面就是解决方案 keepalived配置高可用检测脚本 &#xff0c;master和backup都要添加 配置脚本 # vim /etc/keepalived…...

python学opencv|读取图像(五十六)使用cv2.GaussianBlur()函数实现图像像素高斯滤波处理

【1】引言 前序学习了均值滤波和中值滤波&#xff0c;对图像的滤波处理有了基础认知&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;五十四&#xff09;使用cv2.blur()函数实现图像像素均值处理-CSDN博客 python学opencv|读取图像&#xff08;…...

电梯系统的UML文档13

5.2.6 CarPositionControl 的状态图 图 24: CarPositionControl 的状态图 5.2.7 Dispatcher 的状态图 图 25: Dispatcher 的状态图 5.3 填补从需求到状态图鸿沟的实用方法 状态图能对类的行为&#xff0c;一个用例&#xff0c;或系统整体建模。在本文中&#xff0c;状态图…...

CSDN原力值提升秘籍:解锁社区活跃新姿势

在 CSDN 这个技术交流的大舞台上&#xff0c;原力值不仅是个人活跃度的象征&#xff0c;更是开启更多权益与福利的钥匙。最近&#xff0c;我出于自身需求&#xff0c;一头扎进了提升原力值的研究中&#xff0c;经过多方探索与资料整理&#xff0c;现在就迫不及待地把这些干货分…...

互联网行业常用12个数据分析指标和八大模型

本文目录 前言 一、互联网线上业务数据分析的12个指标 1. 用户数据&#xff08;4个&#xff09; (1) 存量&#xff08;DAU/MAU&#xff09; (2) 新增用户 (3) 健康程度&#xff08;留存率&#xff09; (4) 渠道来源 2. 用户行为数据&#xff08;4个&#xff09; (1) 次数/频率…...

gltf工具

gltf 在线工具 ONLINE 3D VIEWER 3dviewer.netgltf-viewer cos.3dzhanting.cnviewer www.niushifu.topglTF Viewer gltf-viewer.donmccurdy.comGLTF 在线编辑器 gltf.nsdt.cloudgltfeditor...

车载软件架构 --- 基于AUTOSAR软件架构的ECU开发流程小白篇

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…...

Vue.js 如何选择合适的组件库

Vue.js 如何选择合适的组件库 大家在开发 Vue.js 项目的时候&#xff0c;都会面临一个问题&#xff1a;我该选择哪个组件库&#xff1f; 市面上有很多优秀的 Vue 组件库&#xff0c;比如 Element Plus、Vuetify、Quasar 等&#xff0c;它们各有特点。选择合适的组件库&#xf…...

JavaScript系列(58)--性能监控系统详解

JavaScript性能监控系统详解 &#x1f4ca; 今天&#xff0c;让我们深入探讨JavaScript的性能监控系统。性能监控对于保证应用的稳定性和用户体验至关重要。 性能监控基础概念 &#x1f31f; &#x1f4a1; 小知识&#xff1a;JavaScript性能监控是指通过收集和分析各种性能指…...

Flutter 与 React 前端框架对比:深入分析与实战示例

Flutter 与 React 前端框架对比&#xff1a;深入分析与实战示例 在现代前端开发中&#xff0c;Flutter 和 React 是两个非常流行的框架。Flutter 是 Google 推出的跨平台开发框架&#xff0c;支持从一个代码库生成 iOS、Android、Web 和桌面应用&#xff1b;React 则是 Facebo…...

AI-on-the-edge-device - 将“旧”设备接入智能世界

人工智能无处不在&#xff0c;从语音到图像识别。虽然大多数 AI 系统都依赖于强大的处理器或云计算&#xff0c;但**边缘计算**通过利用现代处理器的功能&#xff0c;使 AI 更接近最终用户。 本项目演示了使用 **ESP32**&#xff08;一种低成本、支持 AI 的设备&#xff09;进行…...

站在JavaScript的视角去看,HTML的DOM和GLTF的Json数据。

很多前端小伙伴没有见过、操作过gltf文件&#xff0c;对非常懵逼&#xff0c;本文从前端小伙伴最熟悉的dom模型为切入口&#xff0c;以类别的方式来学习一下gltf文件。 一、结构与组织形式 HTML DOM&#xff08;文档对象模型&#xff09;&#xff1a; 树形结构&#xff1a;HT…...

js --- 获取时间戳

介绍 使用js获取当前时间戳 语法 Date.now()...

冰蝎v3.0 beta7来啦

我用了一台kali&#xff0c;一台centos&#xff0c;一台windows&#xff0c;做了一个文件上传和一个反弹shell实验&#xff0c;载荷是AES加密的&#xff0c;终于感受到了对加密流量的无可奈何~ kali&#xff08;php8.1&#xff09;centos&#xff08;php7.1&#xff09;window…...

将markdown文件和LaTex公式转为word

通义千问等大模型生成的回答多数是markdown类型的&#xff0c;需要将他们转为Word文件 一 pypandoc 介绍 1. 项目介绍 pypandoc 是一个用于 pandoc 的轻量级 Python 包装器。pandoc 是一个通用的文档转换工具&#xff0c;支持多种格式的文档转换&#xff0c;如 Markdown、HTM…...

Elasticsearch Kibana的下载与安装

1.下载Elasticsearch安装包 Elastic — 搜索 AI 公司 | Elastic Download Elasticsearch | Elastic 2.下载Kibana安装包 Download Kibana Free | Get Started Now | Elastic http://localhost:5601/?code708785...

WPS计算机二级•幻灯片的配色、美化与动画

听说这是目录哦 配色基础颜色语言❤️使用配色方案&#x1fa77;更改PPT的颜色&#x1f9e1;PPT动画添加的原则&#x1f49b;PPT绘图工具&#x1f49a;自定义设置动画&#x1f499;使用动画刷复制动画效果&#x1fa75;制作文字打字机效果&#x1f49c;能量站&#x1f61a; 配色…...

高精度乘法(高×高)

高精度乘法&#xff08;高高&#xff09; 前言 ACWing算法基础课讲解了高低的乘法&#xff0c;这里高高作为一个进一步的补充&#xff0c;也是对闫总的板子做一个补充。 以下内容改编自《洛谷深入浅出》123页&#xff0c;我对代码进行了一点修改。 A*B Problem P1303 题目…...

出现 Can not find ‘Converter‘ support class Year 解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. 问题所示 执行代码的时候,出现如下问题: 2025-02-03 19:16:23.638 |...

一表总结 Java 的3种设计模式与6大设计原则

设计模式通常分为三大类&#xff1a;创建型、结构型和行为型。 创建型模式&#xff1a;主要用于解决对象创建问题结构型模式&#xff1a;主要用于解决对象组合问题行为型模式&#xff1a;主要用于解决对象之间的交互问题 创建型模式 创建型模式关注于对象的创建机制&#xf…...

蓝桥与力扣刷题(141 环形链表)

题目&#xff1a;给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的…...

Cursor如何使用Google Gemini以及碰到的坑

Cursor如何使用Google Gemini以及碰到的坑 Cursor介绍下载安装Google Gemini介绍Google Gemini 官网申请Google Gemini API网址 配置Cursor使用Google Gemini打开Corsur设置 Cursor介绍 ‌Cursor是一款基于人工智能的代码编辑器&#xff0c;旨在帮助开发者更高效地编写代码。‌…...

e2studio开发RA4M2(6)----GPIO外部中断(IRQ)配置

e2studio开发RA4M2.6--GPIO外部中断&#xff08;IRQ&#xff09;配置 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置SWD调试口设置GPIO口配置按键中断配置中断回调函数主程序 概述 GPIO&#xff08;通用输入/输出&a…...

day38|leetcode 322零钱兑换,279.完全平方数,139.单词拆分

322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是…...

Windsurf cursor vscode+cline 与Python快速开发指南

Windsurf简介 Windsurf是由Codeium推出的全球首个基于AI Flow范式的智能IDE&#xff0c;它通过强大的AI助手功能&#xff0c;显著提升开发效率。Windsurf集成了先进的代码补全、智能重构、代码生成等功能&#xff0c;特别适合Python开发者使用。 Python环境配置 1. Conda安装…...

使用shell命令安装virtualbox的虚拟机并导出到vagrant的Box

0. 安装virtualbox and vagrant [rootolx79vagrant ~]# cat /etc/resolv.conf #search 114.114.114.114 nameserver 180.76.76.76-- install VirtualBox yum install oraclelinux-developer-release-* wget https://yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-g…...

【25考研】南开软件考研复试复习重点!

一、复试内容 复试采取现场复试的方式。复试分为笔试、机试和面试三部分。三部分合计100分&#xff0c;其中笔试成绩占30%、机试成绩占30%、面试成绩占40%。 1.笔试&#xff1a;专业综合基础测试 考核方式&#xff1a;闭卷考试&#xff0c;时长为90分钟。 笔试考查内容范围…...

设计模式 - 行为模式_Template Method Pattern模板方法模式在数据处理中的应用

文章目录 概述1. 核心思想2. 结构3. 示例代码4. 优点5. 缺点6. 适用场景7. 案例&#xff1a;模板方法模式在数据处理中的应用案例背景UML搭建抽象基类 - 数据处理的 “总指挥”子类定制 - 适配不同供应商供应商 A 的数据处理器供应商 B 的数据处理器 在业务代码中整合运用 8. 总…...

C++基础(2)

目录 1. 引用 1.1 引用的概念和定义 1.2 引用的特性 1.3 引用的使用 2. 常引用 3. 指针和引用的关系 4. 内联函数inline 5. nullptr 1. 引用 1.1 引用的概念和定义 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开…...

C#中的if判断语句详解

SEO Meta Description: 了解C#中的if判断语句&#xff0c;包括基本用法、嵌套使用、多条件判断以及最佳实践&#xff0c;全面掌握条件控制在C#编程中的应用。 介绍 在编程中&#xff0c;条件判断语句是控制程序流程的关键部分。C#提供了多种条件判断语句&#xff0c;其中 if语…...

PythonStyle MVC 开发框架

在 Python 中&#xff0c;MVC&#xff08;Model - View - Controller&#xff0c;模型 - 视图 - 控制器&#xff09;是一种常见的软件设计模式&#xff0c;它将应用程序分为三个主要部分&#xff0c;各自承担不同的职责&#xff0c;以提高代码的可维护性、可扩展性和可测试性。…...

excel实用问题:提取文字当中的数字进行运算

0、前言&#xff1a; 这里汇总在使用excel工作过程中遇到的问题&#xff0c;excel使用wps版本&#xff0c;小规模数据我们自己提取数据可行&#xff0c;大规模数据就有些难受了&#xff0c;因此就产生了如下处理办法。 需求&#xff1a;需要把所有文字当中的数字提取出来&…...

FFmpeg:多媒体处理的瑞士军刀

FFmpeg&#xff1a;多媒体处理的瑞士军刀 前言 FFmpeg 是一个功能强大且跨平台的开源多媒体框架&#xff0c;广泛应用于音视频处理领域。 它由多个库和工具组成&#xff0c;能够处理各种音视频格式&#xff0c;涵盖编码、解码、转码、流处理等多种操作。 无论是专业视频编辑…...

在K8S中,如何把某个worker节点设置为不可调度?

在Kubernetes中&#xff0c;如果你想要把一个worker节点设置为不可调度&#xff0c;意味着你不想让Kubernetes调度器在这个节点上调度新的Pod。这通常用于维护或升级节点&#xff0c;或者当节点遇到硬件故障或性能问题时&#xff0c;要将某个worker节点设置为不可调度。 方法1…...

雷赛LC2000

【一&#xff0c;概述】 这个是中型PLC 【二&#xff0c;外观】 网口编号&#xff1a; 【2】【3】 //默认ip&#xff1a;192.168.1.xxx 【0】【1】 可视化授权不如禾川Q系。 【三&#xff0c;总线轴】 因为本次带的轴是台达A2系列伺服 A2最快总线是【1ms】的倍数…...