一道简单的C#选择题

来源:百度知道 编辑:UC知道 时间:2024/09/21 04:06:54
你正在创建一个背景显示一个图像的自定义控件。你注意到,当控件改变尺寸并重新绘制时,
背景图像出现闪烁现象。你为了去移除这种闪烁现象,你应该通过下面那三段代码实现?(每
个答案代表解决方案的一部分)
A. this.SetStyle(ontrolStyles.OptimizedDoubleBuffer, true);
B. this.SetStyle(ontrolStyles.AllPaintingInWmPaint, true);
C. this.SetStyle(ontrolStyles.UserPaint, true);
D. this.SetStyle(ontrolStyles.ResizeRedraw, true);
E. this.SetStyle(ontrolStyles.Opaque, true);

A B D

A:OptimizedDoubleBuffer:缓存图像,用来减少闪烁
B:AllPaintingInWmPaint:强行忽略WM_ERASEBKGND消息,减少闪烁
C:UserPaint:控件自行运行Paint事件
D:ResizeRedraw:控件大小改变后,强制刷新(默认不刷新)
E:Opaque:不显示背景

A
开启双缓冲,可以防止画面闪烁

好像是A

B也可以,但题目说是背景上绘的图,因此就可以排除了。
C必要而不充分。
D这个一定要设,但是正是这个造成了闪烁。
E本来也是可以“减少"的, 但是题目里说了图在背景上,因此这个也不对了。

OptimizedDoubleBuffer 如果为 true,则该控件首先在缓冲区中绘制,而不是直接绘制到屏幕上,这样可以减少闪烁。如果将此属性设置为 true,则还应当将 AllPaintingInWmPaint 设置为 true。

AllPaintingInWmPaint 如果为 true,控件将忽略 WM_ERASEBKGND 窗口消息以减少闪烁。仅当 UserPaint 位设置为 true 时,才应当应用该样式。

UserPaint 如果为 true,控件将自行绘制,而不是通过操作系统来绘制。如果为 false,将不会引发 Paint 事件。此样式仅适用于派生自 Control 的类。

ResizeRedraw 如果为 true,则在调整控件大小时重绘控件。

Opaque 如果为 true,则控件被绘制为不透明的,不绘制背景。

答案是 ABD 没错。

2楼的说明,很清楚了

正确的答案是:A B D

A:OptimizedDoubleBuffer:缓存图像,用来减少闪烁
B:AllPaintingInWmPaint:强行忽略WM_ERASEBKGND消息,减少闪烁
C:UserPaint:控件自行运行Paint事件
D:Resize