【问题标题】:How do I prevent users from dragging windows around?如何防止用户拖动窗口?
【发布时间】:2013-09-30 14:53:11
【问题描述】:

我继承了一个项目,该项目向用户显示一组选项卡,每个选项卡都包含一个显示多个组件的视图。在其中一些选项卡中,我们希望阻止用户移动选项卡中显示的组件。

我们有一个从 CMFCTabCtrl 继承的对象来管理我们的选项卡,它包含代表我们每个选项卡的 CWnd 对象的集合。我们还有一个对象来管理与每个选项卡关联的视图,并在激活相关选项卡时激活这些视图。

所有组件都共享一个继承自 CWnd 的基础对象,该基础对象为继承的消息映射中定义的消息定义各种处理程序。

防止用户拖动这些组件的正确/最佳方法是什么?

谢谢!

【问题讨论】:

  • 我不清楚你想做什么!是否要禁用 CMFCTabCtrl 中的拖放功能?
  • xMRi - 我不确定?抱歉,我对 MFC 很陌生。如果这就是您所指的,我不想更改拖放选项卡本身的行为。在给定的选项卡窗口中将有一个或多个窗口(组件)。我不希望用户在打开这些窗口后能够修改它们的大小或位置。
  • 如果您可以想象 Chrome 或 Firefox 中的新标签页,您会在其中看到代表您最近访问过的网站的各种框,这有点像我的设置。当您导航到该选项卡时,您可以拖动这些框。我想在我的项目中禁用该行为。

标签: windows visual-c++ mfc cwnd


【解决方案1】:

一种解决方案是从组件 CWnds 中删除标题栏样式。如果没有标题栏,用户将无法拖动窗口。

另一种方法是在组件 CWnds 中处理 WM_NCHITEST 消息。如果您返回适当的值,用户的鼠标在单击时将不会被识别为在标题栏上。

【讨论】:

  • 这就是我要找的,谢谢!我将在开始开发解决方案时尝试此方法,如果可行,我会将其标记为已回答。
【解决方案2】:

移动组件不是默认打开的 Windows 功能。移动组件的代码存在于您的项目中。在您希望禁用该代码的情况下,必须禁用该代码。

我假设您所说的组件是指控件等,而不是子窗口,例如 MDI 类型的应用程序。

【讨论】:

  • 默认没有开启左右拖拽窗口的功能?这似乎不对。这些组件是 CWND 对象,如果这样可以使事情更清楚的话。
【解决方案3】:

尝试将 CMFCTabCtrl::m_bActivateOnBtnUp 设置为 TRUE。 这可能会停用 Drag&Droip 的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2017-10-28
    • 1970-01-01
    相关资源
    最近更新 更多