【发布时间】:2017-03-28 07:35:55
【问题描述】:
一般来说,控件的背景色设置将在 OnPaint() 中绘制,画笔使用控件的背景色创建,如下所示,
using (SolidBrush brush = new SolidBrush(this.BackColor))
{
e.Graphics.FillRectangle(brush, e.ClipRectangle);
}
我的问题是,为什么颜色会暴露在外面,为什么会在内部创建画笔。
而不是公开颜色属性,如 Color BackColor、Color ForeColor。 为什么我们不能像 Brush BackgroundBrush、Brush ForegroundBrush 那样直接将画笔暴露给控件?
问候,
【问题讨论】:
-
(这里不是 GDI 专家,在 C++ 中为 WinAPI 编程了几年,但没什么特别的)...我认为非实体画笔是 GDI 中使用最少的部分之一:- )
-
看来您来自 wpf 世界(或类似世界),因为那里的控件确实暴露了 brushes。这个问题虽然很枯燥,但它会解决什么问题? Winforms 很旧,尝试使用纯 winapi 进行编程以了解它在当时的价值,但对于当前的标准来说它只是旧的。如果您实施自定义绘画,那么您也可以添加您提到的属性,再次,您是否有问题,例如
BackgroundBrush还是什么? -
@Sinatr - 没问题。只是想知道为什么使用颜色而不是画笔。
-
过去画笔是系统资源(对象),你必须dispose them。制作
Brush类型的属性将为每个控件分配它或需要一些方法来共享引用等(忽略有predefined brushes)。颜色很容易。较新的框架没有问题,例如wpf SolidColorBrush 不必处理(但它也有预定义的画笔,这次是为了方便)。