2015-02-12 78 views
0

我想写代码,将填充一个矩形区域的梯度,沿着该区域的对角线变化。我原以为我能与方向参数如下发挥:有没有办法在对角线上填充线性渐变?

context->GradientFillLinear(
    wxrect, 
    get_wx_colour(gradient.front()), 
    get_wx_colour(gradient.back()), 
    wxNORTH | wxEAST); 

当我这样做时,编译器方向的子表达式转换为int和失败,因为一个类型不匹配的编译。我怀疑梯度只能水平或垂直填充,这就是为什么参数写入期望枚举值。任何人都可以证实这种怀疑吗?

回答

1

由于wxWidget-3.0.2的GradientFillLinear实施最终调用一个具体的实现看起来有点像:

wxDCImpl::DoGradientFillLinear() 
{ 
    ... 
    if (nDirection == wxEAST || nDirection == wxWEST) 
    { 
    ... 
    } 
    else // nDirection == wxNORTH || nDirection == wxSOUTH 
    { 
    ... 
    } 

所以,你的怀疑似乎是正确的,即使你没有管理以某种方式强迫在GradientFillLinear的参数中的方向为wxNORTH | wxEAST,实现将不支持它。

1

由于SleuthEye的回答正确地说,这不能直接完成,但您始终可以应用转换来将水平或垂直渐变旋转45度。