我怀疑一定有一种内置的方法可以做到这一点,但我的谷歌失败了。
我正在使用 wxScrolledWindow
,每次滚动窗口时,我都必须在内容后面绘制一个未滚动的背景图片。我做了一个这样的滚动处理程序......
void homewindow_t::onScroll(wxScrollEvent &evt) {
Refresh();
evt.Skip();
}
...强制它每次都重绘整个窗口。不幸的是,它在处理滚动之前 绘制了窗口,因此重新绘制了背景,然后向上或向下滚动,从而搞砸了对齐。文档表明 Refresh
只是使屏幕无效,这意味着滚动处理程序必须强制重绘。
我能看到的解决这个问题的唯一方法是自己处理滚动代码,如果没有必要,我宁愿不这样做。
想法、建议、线索...?
最佳答案
我发现在处理事件后运行代码的唯一通用解决方案是在跳过当前事件之前将第二个不同的事件发布到事件队列(以便它由默认处理程序处理),并处理当它出现时。
然而,仔细阅读 wxWidgets 源代码,我找到了我的特定问题的答案:有一个函数,wxScrolledWindow::EnableScrolling
。虽然从名称上看并不明显,但这将启用或禁用“物理滚动”,这是强制即时重绘的原因。所以在窗口的构造函数中调用 EnableScrolling(false, false);
完全解决了这个问题。
关于c++ - 我可以在处理完内置的 wxWidgets 事件后*运行代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785018/