一、放弃wxWidgets
之前尝试用wxWidgets框架写应用,后来越写越不顺手,所以当代码到达3000行的时候,我就动摇了。想了2-3天,不断地摇摆,最终决定放弃使用wxWidgets,自己实现。而且不借助已有的GUI框架,自己实现用到的UI组件。
因为我想实现的应用程序本身并不复杂,用到的UI组件也不会很多,所以实现难度估计应该不大。实际上经过这几天的初步尝试,感觉也还是非常良好的。
自己实现组件,主要就是对渲染和交互的控制,而且我只需要不到10个基础组件,所以现在代码量2000行左右,已经有了一个大概的模样,预计再有一周左右就可以粗糙的实现出来了。
自己动手实现这些组件更大的好处是控制权限更高,例如事件的传递机制,我可以按照自己的想法进行链式的、广播式的、或者就是定向的传递,十分的灵活。当然这种灵活的前提是建立在良好的封装的基础上的,否则一旦没有及时的进行归纳和封装,就有可能将代码写乱、写花,所以每一个新机能的增加,都要对所有已实现的部分进行一边重构、归纳,这是比较花时间的事情。
不过这样做也有好处,就是一旦当前的小工具实现完毕,就拥有了一个简陋的Simple GUI,这样可以为今后再实现其他软件进行复用,持续做下去,不仅能够丰富自己的基础代码库,也能令后期的开发越来越便捷。
如此看来,现在经历的“枯燥”也许是有价值的,只不过它需要时间去验证、还需要一定的坚持才能见到回报。
二、初步的实现和初步的想法
既然已经决定自己从底层一点点慢慢写起,我也就不急于将最终的工具实现出来了,至少不基于做出一个“公众版”出来,只要自己能先用起来也就可以了。
而且自己实现就意味着要在一张画布上自己实现每一个控件和事件,也就无所谓用什么引擎。基本上能用的窗口管理器+图像引擎都可以拿来使用。这样想来,OpenGL应该是首选、其次SDL2、再次DirectX12。既然无所谓,所以我索性就三种引擎都试一试,都写了一写,最终哪一套的实现效果好并且开发难度小,最终的“公众版本”就基于哪一套继续开发就好了。
至于这个工具的目标平台,其实最初我考虑就是做在Windows系统上,虽然当初选择wxWidgets也有一定的跨平台考虑,但并不迫切。可既然如今决定“在一张白纸上”实现自己的基础控件,也就是说理论上它的跨平台移植能力应该也是有的,所以等到做公众版的时候,可以考虑多平台一起实现出来。
不过上面这些也只是初步的想法、幻想。我甚至这样做的工作量将是巨大的,没有3、5个月,估计连个影子都看不到。所以还是要坚持每天写上一写,才有可能将这个美好的“幻想”尽可能想着“现实”实现出来。