重新计算动态布局属性

2023-11-30

这是一个可调整大小的窗口:

Window 1

设置动态布局属性,以便顶部组框调整宽度大小,下部组/框和树以及 3 个按钮在两个维度上调整大小。

对于高级复选框,我添加了代码来隐藏额外的控件并调整关联框的高度。所以它看起来像这样:

Window 2

用于切换控制值的代码是:

void CWishListDlg::ToggleAdvancedMode()
{
    CRect rtSortTalk, rtTalkSettings, rtTreeGroup, rtTree, rtTalkCombo;

    m_staticSortTalk.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
    m_cbTalkSortField.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
    m_cbTalkSortOrder.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
    m_staticSortSpeaker.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
    m_cbSpeakerSortField.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
    m_cbSpeakerSortOrder.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
    m_staticTalkHistory.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
    m_checkIncludeTalkHistory.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
    m_staticStyle.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);
    m_cbStyle.ShowWindow(m_bAdvancedMode ? SW_SHOW : SW_HIDE);

    m_staticSortTalk.GetWindowRect(&rtSortTalk);
    m_staticSettings.GetWindowRect(&rtTalkSettings);
    m_staticTreeDetails.GetWindowRect(&rtTreeGroup);
    m_Tree.GetWindowRect(&rtTree);

    if (m_bAdvancedMode)
    {
        rtTalkSettings.bottom += m_iOffsetY;
        rtTreeGroup.top += m_iOffsetY;
        rtTree.top += m_iOffsetY;
    }
    else
    {
        rtTalkSettings.bottom -= m_iOffsetY;
        rtTreeGroup.top -= m_iOffsetY;
        rtTree.top -= m_iOffsetY;
    }

    ScreenToClient(&rtTalkSettings);
    ScreenToClient(&rtTreeGroup);
    ScreenToClient(&rtTree);

    m_staticSettings.MoveWindow(&rtTalkSettings);
    m_staticTreeDetails.MoveWindow(&rtTreeGroup);
    m_Tree.MoveWindow(&rtTree);
}

效果很好。我可以切换到我心满意足的状态。直到我尝试调整窗口大小:

Window 3

我看不到任何方法来根据活动显示重新计算动态布局属性。

如果选中“高级”,则控件可见(从而与资源编辑器匹配),然后它会很好地调整大小。只有当它未被选中并且我修改了其中两个控件时,调整大小才无法正常工作。


我发现了这个优秀的资源:

https://mariusbancila.ro/blog/2015/07/27/dynamic-dialog-layout-for-mfc-in-visual-c-2015/

您所要做的就是删除动态布局并重新创建它:

void CWishListDlg::SetupDynamicLayout()
{
    // Disable dynamic layout (this will delete the pointer and set it to NULL)
    EnableDynamicLayout(FALSE);

    // Enable dynamic layout (this will create a new pointer with no elements)
    EnableDynamicLayout(TRUE);

    // Re-create the dynamic layout content
    auto pManager = GetDynamicLayout();
    if (pManager != nullptr)
    {
        pManager->Create(this); // Assign the window!
        auto moveNone = CMFCDynamicLayout::MoveNone();
        auto moveVertical100 = CMFCDynamicLayout::MoveVertical(100);
        auto moveBoth100 = CMFCDynamicLayout::MoveHorizontalAndVertical(100, 100);
        auto sizeBoth100 = CMFCDynamicLayout::SizeHorizontalAndVertical(100, 100);
        auto sizeHorizontal100 = CMFCDynamicLayout::SizeHorizontal(100);
        auto sizeNone = CMFCDynamicLayout::SizeNone();

        pManager->AddItem(m_staticSettings.GetSafeHwnd(), moveNone, sizeHorizontal100);
        pManager->AddItem(m_staticTreeDetails.GetSafeHwnd(), moveNone, sizeBoth100);
        pManager->AddItem(m_Tree.GetSafeHwnd(), moveNone, sizeBoth100);
        pManager->AddItem(IDC_BUTTON_HELP, moveVertical100, sizeNone);
        pManager->AddItem(IDC_BUTTON_REPORT, moveBoth100, sizeNone);
        pManager->AddItem(IDC_BUTTON_EXPAND_ALL, moveBoth100, sizeNone);
        pManager->AddItem(IDC_BUTTON_COLLAPSE_ALL, moveBoth100, sizeNone);
        pManager->AddItem(IDC_STATIC_RESIZE, moveBoth100, sizeNone);
    }
}

遗憾的是,您不能只获取布局中现有的控件或告诉它根据活动内容重新初始化。但这种方式效果很好。现在它可以正确调整大小:

Talk Request List

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重新计算动态布局属性 的相关文章

  • Visual Studio 无法识别我的网络摄像头激光测距仪代码的 MFC 库

    我尝试直接从互联网复制源代码 但由于下面发现的错误 我无法构建 调试整个文件 请帮忙 Error occurred while restoring NuGet packages System ArgumentException The pa
  • 如何正确捕获 Aero/DWM 上的特定窗口

    背景资料 我编写了这个 MFC 应用程序并使用了很长时间 当用户按下 Print Screen Alt Print Screen 键时 它几乎会自动将屏幕截图保存到硬盘 我一直推迟使用任何与 Aero 相关的东西 直到现在我已经使用 Win
  • MFC中Tree(CTreeCtrl)中添加特定树项的图标

    我们可以为特定的树项目添加图标吗 我使用以下功能添加带有图标的项目 HTREEITEM InsertItem LPCTSTR lpszItem int nImage int nSelectedImage HTREEITEM hParent
  • MFC> 将对话框连接到对话框类

    我在现有的资源文件中定义了一个新对话框及其控件 我还创建了一个新文件 它将处理从此对话框生成的事件 但我不确定如何连接这两者 是声明enum IDD IDD NEW DIALOG 连接两者所需的一切 或者我们应该添加一些其他声明 在 MFC
  • DirectUI 的真相是什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个 Windows 桌面应用程序 它需要一个很棒的 UI 我现在使用Visual Studio和MFC 后来听说DirectU
  • Boost::序列化和 MFC Doc/View 架构

    我正在移植现有的 MFC C 应用程序以对 XML 文件使用 Boost Serialization 我的 CDocument 对象包含应用程序的所有数据 我已将序列化函数实现为 template
  • 将简单的 MFC CView/CDocument/CSingleDocTemplate 应用程序转换为 ActiveX 控件

    我有一个相当简单的 MFC 应用程序 它只定义了自己的子类CDocument CView and CFrameWnd并通过使用它们CSingleDocTemplate在视图的树中显示文档的只读内容 都是非常标准的MFC MVC 我现在需要转
  • MFC:如何捕获Web浏览器控件中的链接单击事件?

    我有一个带有 Web 控件的 MFC 应用程序 单击可单击链接时 它将使用 IE 打开 而不是默认浏览器 问题 有没有办法强制使用默认浏览器打开它 如果没有 我如何捕获链接单击事件 以便稍后可以操纵单击事件 谢谢 不 据我所知还没有 查看有
  • 如何在 MFC 中创建 GUI

    我需要能够即时创建指南 MFC中有没有办法做到这一点 我了解了如何在 net 中做到这一点 但我们还没有做到这一点 如果没有 您是否有一些我可以使用的代码的指针 don t forget to add Rpcrt4 lib to your
  • 默认情况下启用或禁用菜单项。为什么?

    我有一些遗留代码 由于某种原因 菜单项在启动时被启用或禁用 我的问题是 如何 有没有办法在不调用 EnableMenuItem 函数的情况下执行此操作 MFC 有没有办法做与资源设置所说相反的事情 我也不明白为什么当最后一个子窗口关闭时 当
  • MFC CMenu 工具提示未显示

    我尝试使用类似的东西来设置 CMenu 项的工具提示 如所述here https stackoverflow com questions 2400180 mfc how to add tooltip in cmenu items 但它只是显
  • 如何通过MFC将应用程序设置保存到注册表中?

    我有一个由 MFC 项目向导创建的 MFC 应用程序 我想在注册表中保存 读取应用程序设置 所以问了这个question https stackoverflow com questions 1880275 good c registry w
  • 屏幕截图忽略了一些窗口

    我正在 MFC 中工作 我正在尝试捕获桌面的 bmp 我正在使用 GetDC NULL 来执行此操作 但它似乎忽略了特殊的皮肤窗口 它似乎忽略了用 UpdateLayeredWindow 绘制的窗口 此行为似乎仅发生在 Vista x64
  • Create CFrameWnd 给出了第一次机会异常——为什么?

    我正在尝试使用基于 CFrameWnd 的代码编写一个简单的 MFC 应用程序 该应用程序在可滚动窗口中绘制 下面的代码改编自 Prosise Programming Windows with MFC 第 2 版 第 89ff 页 当我在调
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str
  • MFC 中位图背景绘制的线程类型

    我有一个 MFC 文档 视图 C 图形应用程序 它将所有绘图都绘制到离屏位图 然后将其复制到 OnDraw 方法中提供的 CDC 指针 在过去的几天里 我一直在寻找将绘图组件放置在单独的工作线程中 这样它就不会停止 GUI 当我执行此操作时
  • Windows API 中逻辑坐标和设备坐标之间的混淆

    我一直在研究一个使用两个函数的 Visual Studio C Windows 应用程序项目SetWindowExt and SetViewportExt 我对这两个函数的作用以及为什么它们是必要的感到困惑 搜索这些函数 我得出了逻辑坐标和
  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • 使用 MFC 对象初始化 std::map 无法编译

    MFC初学者看这里 我尝试过初始化std map像这样 在CView的标题中 myprogramView h std map

随机推荐

  • std::ostream 到 QDataStream

    我已经为 MyClass 重载了 friend std ostream operator lt lt std ostream out const MyClass Obj 现在我想将 std ostream 转换为 QDataStream 而
  • 为什么ld输出的二进制文件无法执行?

    我使用的是 Ubuntu 18 04 x86 64 这是我的程序的两个源文件 main c include stdio h int sum int a int n int array 2 1 2 int main int val sum a
  • PyTables 的优点是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我最近开始学习PyTabl
  • 在 R 中自定义传单地图图标

    我开始学习如何使用传单地图中的搜索功能 下面是传单地图 它允许您搜索城市 即单个搜索词 library leaflet library leaflet extras library dplyr using the same reproduc
  • 如何使 Flex 仅在有用时消耗鼠标滚动和键盘事件,否则将其传递给浏览器?

    This one s been irking me for a while When I m using the mouse scroll wheel to scroll up and down in a webpage and a fla
  • 替换工作表名称中的多个无效字符[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正在写一个相当大的宏 最后使用用户之前输入的名称保存工作簿 我为此使用了工作表的标题 因此我需要删除任何会引发文件系统错误的保留字符 lt gt 我想避免使用大量Replace 语句 那
  • 动态分配文件名到Excel连接字符串

    这是我第一次在 SQL Server 2012 中使用 SSIS 我可以成功读取 excel 文件并将其内容加载到 SQL Server 2012 中的表中 任务是一个简单的直接读取 excel 文件 然后复制到 sql server 无需
  • 当屏幕方向改变时,可以转换先前视图控制器上的视图吗?

    我有一种情况viewControllerA pushes viewControllerB到导航堆栈上 当用户旋转屏幕和方向时viewControllerB改变 我想要一个subviewA of viewControllerA来转变和重新定位
  • 为什么这会产生 StackOverflow 错误?

    我最近开始使用 Haskell 并定义了这个看似简单的函数 f 0 1 f x x f x 1 然而 它的结果是这样的 GHCi version 8 2 1 http www haskell org ghc for help Prelude
  • 用于 MATLAB 的 Java JPA 类

    我在 Windows XP Pro SP3 上使用 MATLAB R2007b Java 1 6 SE Eclipse Helios 和 MySql 5 我正在尝试创建一个使用 JPA 注释访问 MySql 5 数据库的类库 这个想法是 M
  • 使用 PubSubclient 在 esp8266 和 arduino 之间进行 mqtt

    我正在使用 WiFiEsp 库将 ESP8266 与 arduino 结合使用 我想与 arduino 建立 MQTT 连接 所以我使用 PubSubclient 库 我收到错误 正在尝试 MQTT 连接 失败 rc 2 5 秒后重试 我的
  • 批量分割文本文件

    我有这个批处理文件来分割txt文件 echo off for f tokens 1 delims a in findstr n PASSWORD txt do for f delims c in b do gt text a txt ech
  • 使用异步方法等待 Task.Run 不会在正确的线程上引发异常

    当运行下面的测试方法时 我发现即使我等待一个抛出异常的任务 测试也会通过 此外 还会弹出一个单独的窗口 提示 QTAgent exe 已停止工作 这表明异常不会传播到运行测试的线程 而是杀死一个单独的线程 我想知道为什么会发生这种情况 另外
  • 在 Struts 2 中从 Java 获取 JSON 对象

    我正在尝试使用 Java 服务器获取响应文本getJSON jQuery 方法 虽然 当Java类是简单格式时我可以获得响应数据 String List and Map 使用其他Java对象时无法获取成功数据 以下是使用简单类型的 Java
  • PHP:file_get_contents 无法打开流:连接被拒绝

    我正在尝试访问第二台服务器file get contents和 simple load xml 我得到 无法打开流 连接被拒绝 结果会怎样呢 allow url fopen Yes allow url include Off 是我的 php
  • 在 Swift 中转换为不同的 C 结构不安全指针

    我想调用 Posix 套接字函数socket and bind来自斯威夫特 socket很容易 需要Int32s but bind造成了问题 因为我有一个sockaddr in指针 但它需要一个sockaddr指针 在 C 语言中 这将是一
  • 了解 NodeJS WebSocket 服务器的对象创建和垃圾收集

    我正在使用wsNodejs 中用于 Web 套接字服务器的模块 代码的简化版本是这样的 var WebSocketServer require ws Server var wss new WebSocketServer port 9001
  • 如何将字符串日期转换为长毫秒

    我在字符串中有一个日期 例如 12 December 2012 如何将其转换为毫秒 长 Using 简单日期格式 String string date 12 December 2012 SimpleDateFormat f new Simp
  • 为数据表中的计算列定义 DateDiff

    我有 日期时间已过期 列 我想创建另一个名为 已过期 的列 该列将根据过期日期显示 是 或 否 如果日期已过 则显示 是 我写了这个 DataColumn colExpirationDate new DataColumn DateTimeE
  • 重新计算动态布局属性

    这是一个可调整大小的窗口 设置动态布局属性 以便顶部组框调整宽度大小 下部组 框和树以及 3 个按钮在两个维度上调整大小 对于高级复选框 我添加了代码来隐藏额外的控件并调整关联框的高度 所以它看起来像这样 用于切换控制值的代码是 void