【问题标题】:How to prevent WTL CSplitterWindow resize?如何防止 WTL CSplitterWindow 调整大小?
【发布时间】:2017-06-20 06:35:00
【问题描述】:

我正在查看 MFC 拆分器窗口类覆盖:

https://www.codeproject.com/Articles/6188/How-to-prevent-resizing-of-views-in-a-splitter-win

我曾用 WTL CSplitterWindow 测试过覆盖源代码,但它不起作用。

我使用 CSplitOverride 而不是 CSplitterWindow 类修改了 MainFrm.h。

当程序启动时“api-ms-win-core-libraryloader-l1-2-0.dll missing..”弹出错误信息显示。

windows 7 64 位操作系统平台,32 位 vs2015 构建。

class CSplitOverride : public CSplitterWindow
{
public:
  CSplitOverride() { }

protected:
  BEGIN_MSG_MAP(CSplitOverride)
  MESSAGE_HANDLER(WM_NCHITTEST, OnNcHitTest)
  END_MSG_MAP()

public:
  LRESULT OnNcHitTest(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
  {
    return HTNOWHERE;
  }
};

编辑:我已经尝试过厚框设置,但没有可用。 Jan S 解决方案就像我想要的那样工作。

【问题讨论】:

  • 这个问题不够准确。您不希望它响应用户输入吗?你不希望它在调整父级大小时改变大小?
  • 我尝试做的是视频 sdk 示例应用程序,主窗口调整大小已禁用,视频帧窗口不应调整大小。
  • 查看依赖walker 许多核心Windows dll 依赖于api-ms-win-core-libraryloader-l1-2-0.dll 或其他版本。您的可执行文件不应直接依赖它。

标签: c++ wtl


【解决方案1】:

看看 Michael Dunns excellent tutorial on splitter windows(这需要一些更改才能让它在 vs2013 中编译!)

WTL sourceforge 网站上的This discussion 也可能有用

我想您是在问如何在调整主框架大小时使窗格保持恒定大小?这取决于固定窗格的对齐方式

atlsplit.h 定义了以下扩展样式

#define SPLIT_RIGHTALIGNED      0x00000004
#define SPLIT_BOTTOMALIGNED     SPLIT_RIGHTALIGNED

正如 Michael Dun 所说 - “如果没有指定这三种样式,则拆分器默认为左对齐或上对齐。”

  • SPLIT_NONINTERACTIVE 阻止用户调整窗格大小
  • m_cxyMin 硬编码对齐指定的窗格的最小尺寸

    m_wndHorzSplit.SetSplitterExtendedStyle(SPLIT_BOTTOMALIGNED | SPLIT_NONINTERACTIVE); m_wndHorzSplit.m_cxyMin = 150;

【讨论】:

  • m_vSplit.SetSplitterExtendedStyle(SPLIT_NONINTERACTIVE);像魅力一样工作!
猜你喜欢
  • 2011-08-31
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
相关资源
最近更新 更多