慢羊羊的空间

工作做不完了,300出,无瑕。

读取图片的技巧:将图片内嵌到 exe 文件中 铜牌收录

程序中加载图片资源是常见需求。通常,使用相对路径加载图片时,发布项目要把图片一起发布,否则会导致图片无法加载。本文讲解如何将图片以资源形式和 .exe 集成在一起,这样可以做出来只需要一个 .exe 文件就能正确加载图片资源。

详解透明贴图和三元光栅操作 金牌收录

透明贴图,是指贴图时某些部分是完全透明的或半透明的。

本文介绍多种透明贴图的方案,包括:

  1. 指定透明色贴图(基于 Windows API 函数 TransparentBlt)
  2. 指定透明色贴图(基于直接操作显示缓冲区)
  3. 使用三元光栅操作实现透明贴图
  4. 根据 png 的 alpha 信息实现半透明贴图(基于 Windows API 函数 AlphaBlend)
  5. 根据 png 的 alpha 信息实现半透明贴图(基于直接操作显示缓冲区)

各种方法各有利弊,大家可以根据自己的需求选择。

1. 指定透明色贴图(基于 Windows API 函数 TransparentBlt)

这是最简单的透明贴图方法。

该方法要求图片素材的透明部分为纯色,因此建议使用 gif 或 png 格式的图片素材。如果使用 jpg 格式的图片素材,那么由于 jpg 的有损压缩,会造成边缘颜色有微小差异,与指定的透明色并不完全相同,从而导

...

精确延时的实现 金牌收录

使用 Windows API 函数 Sleep(),精度低,而且会忽略掉程序的执行时间,这就导致了程序执行时的帧率不够稳定。本文详细讲解如何精确延时,使程序的计时更精准、帧率更稳定、运行更流畅。

实现桌面截图 铜牌收录

本文讲解怎样截取整个桌面的图像。对于控制台程序,执行后首先会创建一个黑色的控制台窗口,然后才会启动你的程序。因此这时候抓到的图,会包括一个黑色的控制台窗口,我想,这是大多数人不希望看到的。因此,实现抓图,要建立的项目需要是 Win32 Application,而不能是平时用的 Win32 Console Application。

使用程序代码输出常见的字体图标(标志图片) 铜牌收录

程序中经常会使用一些常规的标志(图标、Logo)图片,例如,音量开关、各种方向箭头、扑克牌花色、邮件、电话、磁盘、笑脸/哭脸、五星等等。通常做法是,制作好图片,然后在特定的位置将图片显示出来。本文讲述如何通过输出文字的形式将这些常规的标志图片进行输出。

学习保存应用程序的配置信息 金牌收录

为什么要用配置文件

需要使用配置文件的场景很多,例如:

  • 应用程序启动的时候,通过读取外部的一个“配置文件”,以加载不同的值,实现程序按照不同的需求来执行。
  • 应用程序启动后,用户会有各种操作。当用户下一次启动应用程序时,就会希望保持上一次的操作状态。或者游戏结束后,需要将最高分记录等等。因此,可以在程序关闭的时候,将一些必要的变量保存下来,并且在下一次程序启动的时候,读取这些变量。通常,可以把这些变量保存在“配置文件”中。

创建配置文件

配置文件一般以 .ini 为扩展名,编码为 ANSI 或 Unicode(即 UTF-16 LE)。例如在 \windows 文件夹里面可以找到很多 .ini 文件。.ini 文件的内容是纯文本的,可以直接双击打开编辑。举一个实际例子,下面是一个标准的 .ini 配置文件的内容:

; EasyX 范例
[Ball]
x=10
y=37
r=20
[Wall]
width=
...

创建一个不受系统缩放设置(DPI)影响的绘图窗口 铜牌收录

现在的屏幕分辨率都比较高,为了使屏幕字体不至于太小,通常在 Win10 的显示设置里面设为放大 125% 或 150% 或更大,这样就会导致像素实际上被放大了。

如果你的程序不希望受系统缩放设置影响,你需要使用一个新的 API 函数:SetProcessDpiAwareness

注意这个 API 函数的使用条件:

  • Win8.1 及以上版本
  • 头文件 ShellScalingApi.h
  • 库文件 Shcore.lib

以下是一个完整的范例程序,该范例创建一个不受系统缩放设置影响的绘图窗口,并画一个圆:

// 编译环境:Win10 + VS2019 + EasyX_20200727
//

// 设定操作系统版本为 Win10(需要放到 #include <graphics.h> 前面)
#define WINVER 0x0A00
#define _WIN32_WINNT 0x0A00

...