关于easyx的原点控制

0

我知道EasyX提供了setorigin()函数以用来设置绘制原点,但是没有getorigin()函数来记录当前原点

而这成为了我最近在使用Easyx写一个小型GUI库的时候很头疼的一个问题:要怎样来记录控件之间的层次结构?

比如母窗体下有一个GroupBox,GroupBox下有一个Button,Button的绝对坐标=Button相对于GroupBox的坐标+GroupBox相对于窗口左上角的坐标

如果有getorigin()的话,可以很轻松地在已有原点的基础上加上Button的相对坐标,然后调用Button.Draw(),这样Button绘制的位置就会随着自身及母容器位置的改变而改变

但是没有getorigin(),就必须写一个底层类来控制原点,以免哪个控件直接调用setorigin破坏了层次结构

希望大神来支支招,帮助我构造一个使用方便的原点控制器(当然开发组大大能加上getorigin()那最好不过了)

感谢

ava
无名氏

2020-8-26

0

按照你的例子来说:

窗体下有一个 GroupBox,GroupBox 下有一个 Button
Button 的绝对坐标 = Button 相对于 GroupBox 的坐标 + GroupBox 相对于窗口左上角的坐标

假设有 getorigin() 函数,那么在 Button 内调用 getorigin 获取到的一定是 Button 相对于窗体的坐标,而不是 Button 相对于 GroupBox 的坐标。

所以,你需要在每个对象内加个坐标偏移变量,来记录当前控件相对于父控件的偏移量。并且,根据父控件递归的结算结果,调用 setorigin 设置坐标偏移。

ava
慢羊羊

2020-8-27

明白了,我对绝对坐标和相对坐标还有点懵,现在用了递归求值能解 -  无名氏  2020-8-28
技术讨论社区