c++ - 调整大小的 WTL 布局

标签 c++ resize wtl

我想知 Prop 有更多 WTL 知识的人如何创建这样的东西:

可调整大小的对话框 (-> WS_THICKFRAME),包含两个“区域”。调整大小时,一个区域会在 y 方向增长,并且包含一些组件,这些组件之间的高度距离应相等(例如,区域高度的 0%、25%、50%、75% 和 100%)。

另一个区域在下面并且有固定的高度。调整大小时,这两个区域都应在 x 方向上增长。

这里的重要问题是: a) 这两个区域使用什么容器等 b) 如何处理调整大小(DLGRESIZE_CONTROL 不允许将控件间隔等距,例如 afaik)

谢谢。

最佳答案

您可以为此使用 CDialogResize 类。类中直接继承这个类 定义窗口并定义每个控件应调整为窗口大小的方式 已更新。这些调整大小级联,因此您可以拥有一个以同样实现 CDialogResize 的方式调整大小的窗口。

class CFooWindow : ... public CDialogResize<CFooWindow> {

    BEGIN_MSG_MAP(CFooWindow)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        ... more messages here
        CHAIN_MSG_MAP(CDialogResize<CFooWindow>)
    END_MSG_MAP()

    // This map defines how the controls within the window are resized.
    // You can also use DLGRESIZE_GROUP() to group controls together.
    BEGIN_DLGRESIZE_MAP(CFooWindow)
       DLGRESIZE_CONTROL(IDC_WINDOW_TOP,    DLSZ_SZIZE_X | DLSZ_SIZE_Y);
       DLGRESIZE_CONTROL(IDC_WINDOW_BOTTOM, DLSZ_SZIZE_X | DLSZ_MOVE_Y);
    END_DLGRESIZE_MAP()


    LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {

       DlgResize_Init();
    }
      .. the rest of your class here
}

您可以通过 DLGRESIZE_GROUP() 实现控件之间的间隙,并在资源文件中分隔控件,就像您希望它们在最终布局中分隔一样。尺寸 然后将更新项目。如果您需要任何太复杂的东西,您可以使用对话框调整大小回调来控制项目的确切位置。只需在您的类中实现 CDlgResize::OnSize(UINT nType, int cx, int cy) 并手动更新控件的大小。

关于c++ - 调整大小的 WTL 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6102264/

相关文章:

c++ - ubuntu 版本 "aborting from js compiler due to exception: unknown vector type <4 x i8> | undefined"的 emscripten 问题

jquery - 图像随着浏览器宽度而增长?

C - 调整/放大图像

c++ - 为什么*everything* 在 ATL/WTL 中使用模板基类?

c++ - 客户端/服务器设置仅在同一台计算机上有效

c++ - 每秒在 QGraphicsView 中移动图像

java - 如何使用 PersistentBitmap 和位图调整大小?

c++ - 要构建在 XP 及更高版本上运行但具有最新功能的 WTL 程序,我有哪些选择?

c++ - 为什么子窗口可能收不到鼠标事件?

c++ - std::list 在首次构造时是否为空 - 即使它是类的成员?