独钓寒江雪

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

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

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

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

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

阅读全文 »

Qt 虽然提供了诸如 Qt::FramelessWindowHint 之类的属性可以移除窗体的边框,但是移除边框之后,窗体的一些默认行为同时也被移除了,如鼠标拖动改变大小、双击标题栏最大化等,这些行为需要开发者自己来实现。

本文主要介绍实现无边框窗体的几种方案,并在最后分享了作者实现的方案。

笔者认为,一个完美的无边框窗体解决方案需要支持如下功能:

  1. 支持通过使用鼠标拖拽来改变窗体位置和大小;
  2. 支持双击标题栏最大化窗体和还原窗体;
  3. 支持 Windows Areo Snap 特性;
  4. 支持系统阴影;
  5. 支持跨不同 DPI 的屏幕拖拽;
  6. 适应分辨率和 DPI 改变;
阅读全文 »
0%