如何防止 WTL CSplitterWindow 调整大小?

Posted

技术标签:

【中文标题】如何防止 WTL CSplitterWindow 调整大小?【英文标题】:How to prevent WTL CSplitterWindow resize? 【发布时间】: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 或其他版本。您的可执行文件不应直接依赖它。 【参考方案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);像魅力一样工作!

以上是关于如何防止 WTL CSplitterWindow 调整大小?的主要内容,如果未能解决你的问题,请参考以下文章

WTL头文件外如何实现?

如何在 WTL 应用程序中设置 CWindowImpl FullScreen?

如何将 WTL 和 ATL 添加到 Visual Studio C++ Express 2008

如何在WTL和MFC中使用duilib及如何静态使用duilib库

[WTL/ATL]_[中级]_[自定义TrackBar]

[WTL/ATL]_[中级]_[自定义TrackBar]