我定义了如下一个简单作图类:
struct WinCG {
HDC hdc; // 作图的设备表句柄
COLORREF penColor; // 当相关函数调用省略颜色参数时,使用其作为默认颜色
WinCG(HDC hdc_=0, COLORREF color_=0): hdc(hdc_), color(color_) { }
int setPixel(int x0, int y0, int color=penColor) // Error!!
{
return SetPixel(hdc, x0, y0, color);
}
};
我的目的是包装原GDI函数使得其使用起来更简单,省略hdc参数,而color参数变成可选,当不指定颜色参数时才使用WinCG内定义的penColor。结果编译错误,原因是penColor不是静态成员,但若是静态成员则该类所有对象将共用一个默认颜色,我希望不同的WinCG对象可以设置不同的默认颜色。我自己想了几种解决方案,都觉得不好:
1. 增设一个静态成员作默认颜色,调用某个对象的绘图函数前,先用对象的penColor给该静态成员赋值。缺点是:多个对象共存并交互使用时,每更换一次作图对象就要手动设置一次静态默认颜色值,显然比直接用原GDI函数更麻烦很多。
2. 取消该可选参数,直接使用penColor作为原GDI函数的color参数。缺点是:当不想使用WinCG对象的默认参数,而想自己指定color时,需要先重设WinCG对象的penColor的值,函数调用完毕,还应恢复其原值。
3. 同2,但需要自定颜色时,直接调用原GDI函数。缺点:操作不统一,而且,没有起到封装的目的。
希望大家帮忙看看,有没有别的更好的办法来实现我的目的?或者,我的这种封装思想本身有问题吗?
谢谢~~
[此贴子已经被作者于2007-10-21 13:55:23编辑过]