gpt4 book ai didi

c++ - 如何即时更改 CDockingManager 停靠模式?

转载 作者:太空狗 更新时间:2023-10-29 23:09:21 24 4
gpt4 key购买 nike

我希望能够在 MFC 客户端应用程序中在即时停靠和智能停靠之间切换。默认情况下 DT_IMMEDIATE 将被设置,因此停靠 Pane 的功能类似于 Visio。但是,当用户按下并按住 Ctrl 键时,我想切换到 DT_SMART 并在他们拖动或移动停靠 Pane 时显示智能标记,以便他们可以看到他们可以停靠的各个地方,类似于 Visual Studio 。

我尝试使用按键处理程序来应用它,但它没有触发。然后我求助于使用 PreTranslateMessage,虽然它捕获了输入并成功设置了对接模式,但它没有按预期显示或启用智能对接。

BOOL CMainFrame::PreTranslateMessage(MSG *pMsg)
{
// everything fires and gets set correctly when holding down or pressing Ctrl
// it doesn't ever turn smart docking back on or doesn't display smart markers
// does mouse input interrupt so it doesn't take effect?
if (pMsg->message == WM_KEYDOWN)
{
// also checks that repeating bit is not set in lParam
if (pMsg->wParam == VK_CONTROL && ((pMsg->lParam & (1 << 30)) == 0))
{
CDockingManager::SetDockingMode(DT_SMART);
LOG_DEBUG("DT_SMART");
return TRUE;
}
}
else if (pMsg->message == WM_KEYUP)
{
if (pMsg->wParam == VK_CONTROL)
{
CDockingManager::SetDockingMode(DT_IMMEDIATE);
LOG_DEBUG("DT_IMMEDIATE");
return TRUE;
}
}

return CMDIFrameWndEx::PreTranslateMessage(pMsg);
}

在日志文件中,我可以看到它在按下和释放 Ctrl 键时在设置 DT_SMARTDT_IMMEDIATE 之间交替,但是只有立即对接按预期工作。是否需要进行一些重绘或其他调用才能使其正常工作?

最佳答案

只是为了确定:您是否按住该键一段时间?当您按下并释放按键时,它将触发两次(向下和向上),导致模式重置为 DT_IMMEDIATE(当您释放按键时)。或者,我建议仅在按下键时让模式在 DT_IMMEDIATE 和 DT_SMART 之间切换。

关于c++ - 如何即时更改 CDockingManager 停靠模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5490458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com