我有一个子框架,我在其上绘制图像,当用户调整框架大小时,图像的位置会更新。这会导致一些闪烁,虽然我在某种程度上解决了这个问题,但我希望在用户完成调整大小时更新位置(鼠标左键)。因此,对OnSize
的多次调用只会有一次调用,而且#39;当框架的尺寸完成时。
例如,当运行Matlab的图像处理工具箱并且框架加载了图像时,当用户调整框架大小时,图像的位置不会改变,但是一旦调整大小,图像的位置就会改变。完成(向左按钮)。
我有以下方法,但无法使其正常工作:
void FrmImageEditor::OnSize(wxSizeEvent & event)
{
if (IsIconized() || !IsShown()) return;
std::function<void(wxMouseEvent& evt)> fncBind, fncUnbind;
fncBind = std::function<void(wxMouseEvent& evt)>([&](wxMouseEvent& evt)
{
wxMessageBox("Left up");
Connect(wxEVT_SIZE, wxSizeEventHandler(FrmImageEditor::OnSize));
m_UnbindTheEvent= true;
ReleaseMouse();
});
CaptureMouse();
Disconnect(wxEVT_SIZE, wxSizeEventHandler(FrmImageEditor::OnSize));
if(!m_UnbindTheEvent) Bind(wxEVT_LEFT_UP,fncBind );
if(m_UnbindTheEvent) Unbind(wxEVT_LEFT_UP, fncBind);
上述代码在以下方面不起作用:
有没有办法只实现一个/两个调用OnSize函数(除了在函数中使用静态计数器)。
答案 0 :(得分:0)
我不确定在调整大小期间是否会生成空闲事件,但我不认为它们是。如果这是正确的,那么执行您想要的操作就像在m_shouldResize
处理程序中设置标记wxEVT_SIZE
并在wxEVT_IDLE
中检查它并在实际上调整图像大小一样简单。
如果仍然发出空闲事件太快,您可以使用相同的逻辑,但改为使用计时器事件。