• “熊猫视图”.Net图形控件功能介绍 [三]:前景层与背景层


    “熊猫视图”.Net图形控件功能介绍 [四]:一行代码实现视图自定义坐标系


    “熊猫视图”.Net图形控件提供前景层与背景层的显示输出方式。

    前景层:通常用于绘制悬浮文字、Logo图等。此层中的所有图形图像使用默认坐标系,永远覆盖在背景层之上,不支持缩放。

    背景层:缺省使用系统坐标系,支持自定义坐标系,此层中的所有图形图像支持缩放。

    前景层中的图形图像除了不支持自定义坐标系、不支持缩放平操作以外,其它属性方法和在背景中的使用完全一样。

        前文中绘制的100个随机矩形,是默认在背景层中绘制的。在这个基础上添加下面样例代码,实现在前景层中视图四角绘制四个 150x80 像素的矩形,使用红色边框并蓝色透明填充: 

    1. /* 视图四角绘制四个 150x80 像素的矩形 */
    2. //绘制左上角矩形
    3. PandaView.Rectangle recTop1 = new PandaView.Rectangle();
    4. PointF p3 = new PointF(0, 0);
    5. PointF p4 = new PointF(150, 80);
    6. recTop1.Points = new[] { p3, p4 };
    7. recTop1.TopLevel = true;
    8. recTop1.Anchor = PandaView.AnchorStyle.LeftTop;
    9. recTop1.AnchorSpace = new PandaView.AnchorSpace(20, 20);
    10. recTop1.Pen = new Pen(Color.Red);
    11. recTop1.Pen.Width = 4;
    12. recTop1.Fill = true;
    13. recTop1.FillBrush = new SolidBrush(Color.FromArgb(128, 0, 0, 255));
    14. recTop1.Creat(pandaView1);
    15. //绘制右上角矩形
    16. PandaView.Rectangle recTop2 = new PandaView.Rectangle();
    17. PointF p5 = new PointF(0, 0);
    18. PointF p6 = new PointF(150, 80);
    19. recTop2.Points = new[] { p5, p6 };
    20. recTop2.TopLevel = true;
    21. recTop2.Anchor = PandaView.AnchorStyle.RightTop;
    22. recTop2.AnchorSpace = new PandaView.AnchorSpace(20, 20);
    23. recTop2.Pen = new Pen(Color.Red);
    24. recTop2.Pen.Width = 4;
    25. recTop2.Fill = true;
    26. recTop2.FillBrush = recTop1.FillBrush;
    27. recTop2.Creat(pandaView1);
    28. //绘制左下角矩形
    29. PandaView.Rectangle recTop3 = new PandaView.Rectangle();
    30. PointF p7 = new PointF(0, 0);
    31. PointF p8 = new PointF(150, 80);
    32. recTop3.Points = new[] { p7, p8 };
    33. recTop3.TopLevel = true;
    34. recTop3.Anchor = PandaView.AnchorStyle.LeftBottom;
    35. recTop3.AnchorSpace = new PandaView.AnchorSpace(20, 20);
    36. recTop3.Pen = new Pen(Color.Red);
    37. recTop3.Pen.Width = 4;
    38. recTop3.Fill = true;
    39. recTop3.FillBrush = recTop1.FillBrush;
    40. recTop3.Creat(pandaView1);
    41. //绘制右下角矩形
    42. PandaView.Rectangle recTop4 = new PandaView.Rectangle();
    43. PointF p9 = new PointF(0, 0);
    44. PointF p10 = new PointF(150, 80);
    45. recTop4.Points = new[] { p9, p10 };
    46. recTop4.TopLevel = true;
    47. recTop4.Anchor = PandaView.AnchorStyle.RightBottom;
    48. recTop4.AnchorSpace = new PandaView.AnchorSpace(20, 20);
    49. recTop4.Pen = new Pen(Color.Red);
    50. recTop4.Pen.Width = 4;
    51. recTop4.Fill = true;
    52. recTop4.FillBrush = recTop1.FillBrush;
    53. recTop4.Creat(pandaView1);

    其中关键代码:

    1. //在前景层绘制
    2. recTop4.TopLevel = true;
    3. //定位在右下角
    4. recTop4.Anchor = PandaView.AnchorStyle.RightBottom;
    5. //水平和垂直边缘距离
    6. recTop4.AnchorSpace = new PandaView.AnchorSpace(20, 20);

    AnchorStyle是个枚举值:

    1. public enum AnchorStyle
    2. {
    3. ///
    4. /// 该图形定位到视图的左上角
    5. ///
    6. LeftTop,
    7. ///
    8. /// 该图形定位到视图的右上角
    9. ///
    10. RightTop,
    11. ///
    12. /// 该图形定位到视图的左下角
    13. ///
    14. LeftBottom,
    15. ///
    16. /// 该图形定位到视图的右下角
    17. ///
    18. RightBottom
    19. }

    将上面绘制四个矩形的代码优化后如下:

    1. /* 视图四角绘制四个 150x80 像素的矩形 */
    2. for (int i = 0; i <= 3; i++)
    3. {
    4. PandaView.Rectangle recTop = new PandaView.Rectangle();
    5. recTop.Points = new[] { new PointF(0, 0), new PointF(150, 80) };
    6. recTop.TopLevel = true;
    7. recTop.Anchor = (PandaView.AnchorStyle)i;
    8. recTop.AnchorSpace = new PandaView.AnchorSpace(20, 20);
    9. recTop.Pen = new Pen(Color.Red, 4);
    10. recTop.Fill = true;
    11. recTop.FillBrush = new SolidBrush(Color.FromArgb(128, 0, 0, 255));
    12. recTop.Creat(pandaView1);
    13. }

    注意:四个矩形的指定绘制位置都是(0,0)(150,80),边缘距离都设置为 new PandaView.AnchorSpace(20, 20),但是每个矩形的AnchorStyle值不同,控件都能够自动定位并偏移。从用户使用角度考虑是非常容易理解和使用的。

    演示效果如下:

  • 相关阅读:
    Unity摄像机跟随
    LVS面试题
    揭开空白网页背景色的神秘面纱
    C++中的赋值运算符重载和类的那点事
    数组转换字符串
    项目收获总结--MyBatis的知识收获
    持续交付(三)Jenkinsfile语法使用介绍
    互联网医院|互联网医疗模式已从概念走向实体建设阶段
    自动驾驶的商业应用和市场前景
    从一道算法题到Map再到for...of的执行原理
  • 原文地址:https://blog.csdn.net/mosangbike/article/details/126027369