最近有人要做这两个效果,把demo放上来。
绘制渐变文字:
[C++] 纯文本查看 复制代码 void CMainDlg::onBtnDrawString()
{
SWindow *pCanvasWnd = FindChildByName("canvas");
if(pCanvasWnd){
CRect rc = pCanvasWnd->GetClientRect();
SAutoRefPtr<IPathS> path;
GETRENDERFACTORY->CreatePath(&path);
path->addString(L"Hello Soui4",-1,rc.left,rc.top,SFontPool::GetFont(L"size:30",100));
IRenderTarget *pRT = pCanvasWnd->GetRenderTarget(NULL,GRT_OFFSCREEN);
SAutoRefPtr<IBrushS> br;
Gra***ntItem items[2];
items[0].cr=RGBA(255,0,0,255);
items[0].pos=0;
items[1].cr=RGBA(0,255,0,255);
items[1].pos = 1.0;
Gra***ntInfo info;
info.type=linear;
info.angle=0;
pRT->CreateGra***ntBrush(items,2,&info,255,kClamp_TileMode,&br);
pRT->SelectObject(br);
pRT->FillPath(path);
pRT->SelectDefaultObject(OT_BRUSH);
pCanvasWnd->ReleaseRenderTarget(pRT);
}
}
绘制渐变线条:
[C] 纯文本查看 复制代码 void CMainDlg::onBtnDrawCurve()
{
SWindow *pCanvasWnd = FindChildByName("canvas");
if(pCanvasWnd){
CRect rc = pCanvasWnd->GetClientRect();
SAutoRefPtr<IPathS> path;
GETRENDERFACTORY->CreatePath(&path);
path->moveTo(rc.left,rc.CenterPoint().y);
path->rCubicTo(100,50,200,-50,300,100);
IRenderTarget *pRT = pCanvasWnd->GetRenderTarget(NULL,GRT_OFFSCREEN);
Gra***ntItem items[2];
items[0].cr=RGBA(255,0,0,255);
items[0].pos=0;
items[1].cr=RGBA(0,255,0,255);
items[1].pos = 1.0;
Gra***ntInfo info;
info.type=linear;
info.angle=0;
SAutoRefPtr<IPenS> pen,oldPen;
pRT->CreatePen(PS_SOLID,0,5,&pen);
pRT->SelectObject(pen,(IRenderObj**)&oldPen);
pRT->DrawGra***ntPath(path,items,2,&info);
pRT->SelectObject(oldPen);
pCanvasWnd->ReleaseRenderTarget(pRT);
}
}
工程代码:
Soui4Wizard1.zip
(29.6 KB, 下载次数: 4, 售价: 1 SOUI币)
|