首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态更改CDockingManager对接模式?

如何动态更改CDockingManager对接模式?
EN

Stack Overflow用户
提问于 2011-03-31 02:19:58
回答 2查看 922关注 0票数 3

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

我试着用一个按键按下的处理程序来应用它,但它不会触发。然后我求助于使用PreTranslateMessage,虽然它捕获了输入并成功地设置了停靠模式,但它没有按预期显示或启用智能停靠。

代码语言:javascript
复制
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,但是只有立即停靠才能按预期工作。是否需要进行一些重绘或其他调用才能使其正常工作?

EN

回答 2

Stack Overflow用户

发布于 2011-06-16 18:38:28

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

票数 1
EN

Stack Overflow用户

发布于 2017-05-17 15:57:53

我知道这个话题很老了。但是..。我注意到给你打电话

代码语言:javascript
复制
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
CDockingManager::SetDockingMode(DT_SMART);

似乎修复了缺少的位图,至少在当前的Windows会话中是这样。即使您以后使用了不同的VisualManager。至于它为什么要这样做,仍然是一个完全的谜。

在CMFCVisualManagerVS2005构造函数中编辑这一行似乎可以做到这一点。

代码语言:javascript
复制
CDockingManager::EnableDockSiteMenu();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5490458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档