|
|
lpszClassName
字符串的类名
以下详细讨论各成员的具体意义:
Style成员决定了从该类创建出来的窗口的风格,可以使用下列值的一个或几个的组合。
如果使用这两个标志,窗口的的客户区或整个窗口都在“字节边界”上对齐,也就是说,系统调整窗口的水平位置,客户区或整个窗口的左边坐标是8的倍数。win32 SDk的文档说这两个标志影响窗口的宽度,但是实际上笔者没有发现这个现象,此标志只影响窗口的水平位置(左边)。
看看系统如何摆放一个边框宽度为4的窗口:
Original window location
Placement with CS_BYTEALIGNWINDOW
Placement with CS_BYTEALIGNCLIENT
0,y
0,y
4,y
1,y
0,y
4,y
2,y
0,y
4,y
3,y
0,y
4,y
4,y
8,y
4,y
5,y
8,y
4,y
6,y
8,y
4,y
7,y
8,y
4,y
8,y
8,y
12,y
9,y
8,y
12,y
10,y
8,y
12,y
11,y
8,y
12,y
12,y
16,y
12,y
13,y
16,y
12,y
14,y
16,y
12,y
15,y
16,y
12,y
16,y
16,y
20,y
这两个标志在以下两个情况中无效:
其实当DefWindowProc接受到WM_WINDOWPOSCHANGING消息后,确实发送一条WM_GETMINMAXINFO消息,但是并不迫使窗口接受字节对齐的风格,为了确保字节对齐风格,应用程序必须通过计算再改变其水平位置
CS_BYTEALIGNCLIENT 和CS_BYTEALIGNWINDOW的存在是为了优化程序的性能,尤其在是3.0版本的windows系统以前。那时侯,所有的系统字体宽度都是固定的,系统可以通过使窗口字节对齐优化字体的显示。在3.0以后的window里,这一点已经被忽略了。
如果程序使用BitBlt函数从一个窗口向另一个窗口,或者从窗口的某个矩形区域向另一个矩形区域拷贝象素,还是可以通过设置CS_BYTEALIGNCLIENT标志来获得更好的性能。如果客户区是字节对齐的,程序也可以尽量保证BitBlt操作发生在字节对齐的矩形里, BitBlt操作将会比发生于非字节对齐的矩形里的操作更快。当然,字节对齐仅仅是对窗口的左边界而言的,如果要进一步的提高性能,应该连宽度都进行字节对齐。
其实对于可以显示256及以上颜色的视频卡或显示器,对字节对齐的需求已经微乎其微了。256色显示器已经自己实现了字节对齐,实际上,一些16色的显示器也是字节对齐的。在大部分显示器上根本看不出来字节对齐限定对窗口位置的影响。一句话,字节对齐标志已经没有什么重要的作用了。
使用CS_BYTEALIGNWINDOW的时候也等同于包含了CS_BYTEALIGNCLIENT;对话框类本身已经默认包含了CS_BYTEALIGNWINDOW标志
这几个标志决定窗口的默认DC
网友评论:(评论内容只代表网友观点,与本站立场无关!) |
阅读排行
|