独钓寒江雪

用C++的优雅,驯服Windows的狂野

如果界面所指定的字体在用户系统上未安装,则会自动降级到系统默认字体,这样会导致界面显示异常或达不到预期效果。

对于特殊字体我们通常会集成到软件安装包内,但对于汉字这样的语言,它的文字比较多,因此字体文件比较大,如果集成到安装包内会导致安装包体积变大,所以对于类似中文这样字符比较多的语言字体,我们通常会选择系统自带的字体。

而不同操作系统(如Windows和macOS)所自带的字体不一样,甚至同一操作系统不同的版本(如Windows 7和Windows 11)自带的字体也不一样,因此在选择采用什么字体前,需要弄清我们应用程序支持的操作系统所自带的字体都有哪些,才能更好的做选择。

操作系统的新版本通常只会新增字体,不会移除老的字体。

阅读全文 »

本文主要介绍如何在 Node-API 中实现不同类型的接口,主要有下面几种类型:

  • 同步调用
  • 基于 Napi::AsyncWorker 的异步调用,通过回调函数返回
  • 异步调用,返回 Promise
  • 基于 Napi::ThreadSafeFunction 的异步调用,通过回调函数返回
阅读全文 »

ABI 是 Application Binary Interface 的缩写,当我们以二进制形式(非源码形式)发布我们的动态库时,就需要关心ABI兼容(也称二进制兼容)。

对于静态库,更新静态库始终都需要该库的使用方重新编译,因此不存在ABI兼容的说法。

阅读全文 »

在使用 Electron 开发客户端时,如果现有 Node 模块所提供的功能无法满足需要,我们可以使用 C++ 开发自定义的 Node 模块,也称插件(addon)。

Node.js 插件的扩展名为 .node,是二进制文件,其本质上是通过动态链接库(.dll 或 .so)重命名而来。

阅读全文 »

spdlog是一个高性能 C++日志库,可以支持仅头文件(header-only)模式使用。

官网地址:

https://github.com/gabime/spdlog

spdlog 是线程安全的,但不是进程安全的,可以多个线程同时使用一个 spdlog 对象输出日志,但不能多个进程同时往一个文件写入日志。

在 spdlog 内部使用fmt进行字符串的格式化,因此 spdlog 字符串格式的方式与 fmt 库相同,如:

1
spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);
阅读全文 »

在 C/C++中涉及的整数相关的类型大致有如下几种:

  • char、unsigned char
  • short、unsigned short
  • int、unsigned int
  • long、unsigned long
  • long long、unsigned long long
  • int8_t、uint8_t
  • int32_t、uint32_t
  • int64_t、uint64_t
  • DWORD
  • DWORD32、DWORD64
  • size_t、ssize_t
  • SIZE_T、SSIZE_T
阅读全文 »

在 Windows 系统中,我们按下 Win+D 快捷键执行“显示桌面”时,会将桌面上的所有窗口都最小化到任务栏,再次按下还会还原窗口状态。如果在执行显示桌面操作时,有些窗口仍然保持显示状态,不被最小化,这些窗口称之为逃脱了显示桌面指令。

实现逃脱显示桌面的方式有三种,每种方式有不同的应用场景。

阅读全文 »
0%