CS_BYTEALIGNCLIENT 和 CS_BYTEALIGNWINDOW 是什么意思?

Nic*_*Ema 3 winapi alignment

我很难理解这两种班级风格。文档说他们在字节边界上对齐窗口,但我不明白这意味着什么。

我尝试过使用它们,是的,创建时窗口的位置是不同的,但我不清楚它们的作用以及为什么要使用它们。

Adr*_*ica 5

\n

它们有什么作用以及我为什么要使用它们?

\n
\n

借助现代显示技术和 GPU,它们(可能)在性能方面的作用微乎其微。

\n

不过,在较早的时代,(可能较慢的)CPU 需要将 RAM 块直接写入显示内存。在这种情况下,显示器和/或位图的“颜色深度”小于一个字节 \xe2\x80\x93,例如单色(每像素 1 位)和低颜色(例如 4 bpp)\xe2\ x80\x93 窗口及其客户端可以对齐,使得每一行不实际字节边界“对齐”;因此,块复制操作(如BitBlt)将非常慢,因为必须根据行的第一个字节中的某些位,通过手动设置显示内存中的某些位来设置每行几个像素。源(RAM)。这些缓慢的操作也会沿着每一行传播。

\n

强制显示(无论是客户区域还是整个窗口)将其 x 原点(那些标志/样式仅影响 x 位置)与真实字节边界对齐可以允许更快的复制,因为这样就可以直接进行复制。源(RAM)中的字节与目标(显示)中的字节之间的对应关系;因此,可以执行一行字节的简单块复制(使用类似于 的东西memcpy),而不需要对不同字节中的各个位进行任何操作。

\n

作为一个模糊的类比,请考虑以下之间的差异(速度和简单性): (a) 将一个n字节数组复制到另一个相同大小的数组;(b)用一个源元素的低4位与下一个源元素的高4位的组合来替换第二数组中的每个字节。

\n