通知公告
为什么我使用Drawing的裁剪函数后绘制不正常?
日期:2015-12-15  发布人:admin  浏览量:148

在OnRender函数,有时候定制的业务控件需要实现自己的绘制逻辑,而且还会用到裁剪等操作,比如:

 

void OnRender(suic::Drawing* drawing)

{

   // 设置这个裁剪仅仅为了裁剪下面的圆形绘制

   drawing->ClipRect(...);

   // 这里会裁剪圆

   drawing->DrawCircle(...);

   // 其它绘制
}

 

上述代码绘制是有问题,因为在使用了drawing->ClipRect(...)等裁剪方法后,当前裁剪栈就会发生变化,上述代码就会影响下面所有的绘制(出了OnRender就会自动恢复),那么,怎么保证设置的裁剪仅仅影响drawing->DrawCircle(...)这句绘制呢,而不会对下面的绘制造成影响,方法就是suic::Drawing的Save和Restore,这两个方法用来保存和恢复当前绘制栈,必须配对出现,代码改动如下:

 

void OnRender(suic::Drawing* drawing)

{

   // 先保存当前的裁剪栈

   drawing->Save();

   // 设置这个裁剪仅仅为了裁剪下面的圆形绘制

   drawing->ClipRect(...);

   // 这里会裁剪圆

   drawing->DrawCircle(...);

   // 绘制完圆形后恢复

   drawing->Restore();

 

   // 其它绘制
}