3.主程序预留接口搜索框写成dll注入
1. 核心原理要实现“注入并显示”,DLL 必须能把自己挂载到主程序的渲染循环里。在 raylib 中,由于它是顺序执行的,最简单的“注入”方式是:
主程序提供一个入口(类似一个“插件槽位”)。
2. DLL 端代码:searchbox_dll.cpp1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071#include "IPlugin.h"#include <vector>// 插件内部私有变量(被封存在 DLL 内存空间中)static char inputText[64] = { 0 };static int letterCount = 0;static bool active = false;// --- 接口实现函数 ---void SearchOnInit() { // 可以在这里初始化资源, ...
2.ray实现搜索框架
在 raylib 中实现搜索框,主要需要解决三个问题:键盘输入捕捉、光标闪烁动画、以及文本溢出处理。
1. 核心逻辑:即时模式输入搜索框的本质是一个字符串。每一帧,你都要检查键盘是否有按键被按下,并将其追加到字符串末尾。
2. 代码实现示例这段代码演示了如何创建一个带圆角阴影、支持退格键(Backspace)和动态光标的现代搜索框。
C++
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586#include "raylib.h"#include <string.h>int main() { InitWindow(800, 450, "Raylib Search Box"); // 搜索框状态 char inputText[64] = & ...
1.ray实现桌面挂件
实现一个现代桌面挂件的代码。它具备以下特性:
无边框与全透明:图片像直接贴在桌面上一样。
鼠标拖动:因为去掉了系统边框,我们手动实现点击图片即可拖拽。
圆角处理:利用 Shader 实时裁剪图片为圆角。
置顶显示:永远浮在其他窗口上方。
1. 准备工作请确保目录下有一张名为 image.png 的图片,并创建一个 mask.fs 文件用于圆角裁剪:
mask.fs (圆角裁剪着色器)
OpenGL Shading Language
123456789101112131415#version 330in vec2 fragTexCoord;out vec4 finalColor;uniform sampler2D texture0;uniform float roundness; // 0.0 到 0.5void main() { vec2 p = fragTexCoord - vec2(0.5); vec2 q = abs(p) - vec2(0.5 - roundness); float dist = length(max(q, 0.0)) + min ...
13.linux下使用cmake与preset构建cpp项目
.linux下使用cmake与preset构建cpp项目1.main.cpp12345678910111213#include <iostream>int main(){ auto lang = "C++"; std::cout << "Hello and welcome to " << lang << "!\n"; for (int i = 1; i <= 5; i++) { std::cout << "i = " << i << std::endl; } return 0;}
CMakeLists.txt12345678910111213cmake_minimum_required(VERSION 3.31)project(preset1 VERSION 0.1 LANGUAGES CXX C)set(CMAKE_CXX_STAN ...
12.使用cmake构建vcpkg管理的opencv库
1.使用vcpkg安装opencv库1./vcpkg install opencv:x64-windows --head --clean-after-build
2.在cmake中引入vcpkg管理的qt6静态库1.main.cpp12345678910#include <QCoreApplication>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); qDebug("hello,world\n"); qDebug() << "hi:" << "see you"; return a.exec();}
2.cmakelists.txt1234567891011121314151617181920212223242526272829303132cmake_minimum_required(VERSION 3.16)# 移除或修改三元组:改为动态版本 x64- ...
11.cmake使用ninja配合配置构建qt程序
cmake使用ninja配合配置构建qt程序1.控制台程序1.src/main.cpp12345678910#include <QCoreApplication>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); qDebug("hello,world\n"); qDebug() << "hi:" << "see you"; return a.exec();}
2.CMakeLists.txt123456789101112131415161718192021222324252627282930cmake_minimum_required(VERSION 3.24.0)# 设置项目名称和版本project(MyQtApp VERSION 0.1 LANGUAGES CXX)#系统变量中没有Qt目录需要添加路径option(USE_STATIC_QT " ...
10.cmake使用不同编译器
使用不同编译器强制使用命令行选择编译器123456789101112131415161718# 强制使用 Clangcmake -S . -B build -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang# 强制使用 GCC (确保已经在环境变量中)cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++# 强制使用 msvc# 方式 A:使用默认的 Visual Studio 生成器(生成 .sln 工程)cmake -S . -B build_msvc -G "Visual Studio 17 2022" -A x64# 方式 B:使用 Ninja 生成器(更推荐,速度更快,但需要进入“开发者命令提示符”)cmake -G "Ninja" -S . -B build_msvc -DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.ex ...
9.cmake编译静态库与动态库
1使用cmake编译静态库项目结构12345678910111213│ CMakeLists.txt│├─out│ └─build│ └─x64-debug├─ProjectA│ CMaKeLists.txt│ main.cpp│└─ProjectB_lib CMakeLists.txt ProjectB.cpp ProjectB.h
根目录文件CMakeLists.txt1234567891011121314151617181920cmake_minimum_required(VERSION 3.15)project(MultiProjectSolution)# --- 1. MSVC 特殊优化配置 ---if (MSVC) # 开启多核并行编译 add_compile_options(/MP) # 智能调试信息格式策略 (CMP0141) if (POLICY CMP0141) cmake_policy(SET CMP0141 NEW) set( ...
8.cmake使用vcpkg在vs2022中链接gtest库
gtest在vs2022中使用cmake添加vcpkg管理的gtest库1.在CMakePresets.json中添加配置
123"cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "C:/D/test/CC++/cc++lib/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake"}
项目结构1234567891011121314151617181920│ CMakeLists.txt│ CMakePresets.json│├─CMakeProject2│ CMakeLists.txt│ CMakeProject2.cpp│ MyClass.cpp│ MyClass.h│├─CMakeProject3│ CMakeLists.txt│ CMakeProject3.cpp│├─out│ └─build└─unit_tests CMakeLists.txt ...
7.cmake使用vcpkg链接gtest库
gtest1.windows上使用vcpkg下载gtest动态库与静态库1.gtest动态库1.\vcpkg.exe install gtest:x64-windows
2.下载安装git bash环境2.cmake使用vcpkg管理的gtest库1.项目结构1234│ build.sh│ CMakeLists.txt│ test_example.cpp
2.test_example.cpp123456789101112131415161718192021222324252627282930313233343536#include <gtest/gtest.h>#include <iostream>// 对应 TEST_MODULE_INITIALIZE:GTest 使用全局环境或简单的函数// 如果只是打印,可以直接在测试用例里写,或者使用下面的全局环境class MyEnvironment : public ::testing::Environment {public: void SetUp() override { ...
