我有一个从wx.Panel派生出来的类,它在一个大的边界区域创建一个图像(例如,左边边缘的30像素多一点)。我希望能够在我的应用程序的一部分中为面板派生子类,但是我想不出如何调整派生面板中子面板的位置--他们认为添加的边框区域是客户端窗口的一部分,并且非常高兴地将自己置于其中(随后被基类‘EVT_PAINT处理程序删除)。
我尝试过跟踪客户区域并覆盖各种GetClient.方法在我的基类中,但是它似乎没有改变任何关于子行为的内容。我想我可以手动地重新定位子类中的子窗口,但是这是大量重复的代码,似乎没有必要。
在互联网上寻找答案并不是一项成功的事业。我还试着通过wx代码寻找答案,但我在那里也没有任何运气。
在窗口中定义工作区的最佳方法是什么,这样孩子就可以自动地将自己定位在父服务器的边缘之外了?是否有一种方法可以告诉新对象,它们的父对象的工作区不是从(0,0)开始(似乎重写GetClientAreaOrigin应该这样做,但似乎不起作用)?我应该在Layout()或wx.EVT_SIZE处理程序的上下文中手动移动它们吗?什么是优雅和/或适当的解决方案?
发布于 2016-01-21 16:41:36
经过一些努力,我放弃了这种笨重的方法,但我确实取得了有限的成功,我想指出一些我学到的东西,以防别人在考虑它。
我认为我能给出的最好的建议是考虑寻找其他方法来做到这一点;在我的例子中,我能够创建一个控件,该控件可以包含在一个面板中,以方便家长的期望行为;父母例程中的钩子比我在最初的工作中创建的派生类的Frankensteinian混乱要容易得多。
https://stackoverflow.com/questions/34625218
复制相似问题