在调整大小事件结束时调用 wxSizeEvent
Calling wxSizeEvent at the end of sizing event
我在 child 框架上绘制图像,当用户调整框架大小时,图像的位置也会更新。这会导致一些闪烁,虽然我在某种程度上解决了这个问题,但我想在用户完成调整大小时(鼠标左键向上)时更新位置。因此,不会多次调用 OnSize
,只会调用一次,那就是当 调整框架尺寸时 。
例如,当 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);
以上代码在以下情况下不起作用:
- 在 parent 或 child 框架上的某处单击鼠标按钮(左上)之前,我无法调整框架的大小。
- 即使我调整它的大小,我也无法解除绑定函数,因为在 child window.
的客户区单击时 MessageBox 不断弹出
有没有办法实现仅 one/a 对 OnSize 函数的调用(除了在函数中使用静态计数器)。
我不确定在调整大小时是否会生成空闲事件,但我认为不会。如果这是正确的,那么做你想做的事情就像在你的 wxEVT_SIZE
处理程序中设置一个标志 m_shouldResize
并在 wxEVT_IDLE
中检查它一样简单,如果是真的则实际调整图像的大小。
如果空闲事件仍然发出得太快,您可以使用相同的逻辑,但改用计时器事件。
我在 child 框架上绘制图像,当用户调整框架大小时,图像的位置也会更新。这会导致一些闪烁,虽然我在某种程度上解决了这个问题,但我想在用户完成调整大小时(鼠标左键向上)时更新位置。因此,不会多次调用 OnSize
,只会调用一次,那就是当 调整框架尺寸时 。
例如,当 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);
以上代码在以下情况下不起作用:
- 在 parent 或 child 框架上的某处单击鼠标按钮(左上)之前,我无法调整框架的大小。
- 即使我调整它的大小,我也无法解除绑定函数,因为在 child window. 的客户区单击时 MessageBox 不断弹出
有没有办法实现仅 one/a 对 OnSize 函数的调用(除了在函数中使用静态计数器)。
我不确定在调整大小时是否会生成空闲事件,但我认为不会。如果这是正确的,那么做你想做的事情就像在你的 wxEVT_SIZE
处理程序中设置一个标志 m_shouldResize
并在 wxEVT_IDLE
中检查它一样简单,如果是真的则实际调整图像的大小。
如果空闲事件仍然发出得太快,您可以使用相同的逻辑,但改用计时器事件。