【问题标题】:Resources and control position in win32 programmingwin32编程中的资源和控制位置
【发布时间】:2011-05-25 06:03:50
【问题描述】:

我是 win32 编程新手,对资源有一些疑问。

我必须使用资源编辑器(来自 Visual Studio)来制作控件吗?我知道它可以使用 Resource Hacker 编辑器进行后期编辑。如何预防?

在 Windows Forms (.net) 或 Borland Delphi (VCL) 中创建的 GUI 无法使用 res 黑客进行编辑,它可能会在运行时创建控件。

通过运行时进行所有控制以防止其被 res 黑客编辑是一项毫无意义的工作吗?

HWND hButton = CreateWindowEx(
    0,
    _T("BUTTON"),
    _T("Click!"),
    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_LEFTTEXT,
    5, 5, 80, 25, hwnd, (HMENU)IDC_BUTTON1,
    GetModuleHandle(NULL),
    NULL
);

第二个问题:有没有一种简单的方法可以在父窗口的右上角中设置控件的位置?

今天我是这样做的:

case WM_SIZE:
    {
        HWND hButton;
        RECT rcParent, rcButton;

        hButton = GetDlgItem(hwnd, IDC_BUTTON1);

        GetClientRect(hwnd, &rcParent);
        GetClientRect(hButton, &rcButton);

        if(!SetWindowPos(hButton, 0, rcParent.right - (rcButton.right - rcButton.left + 5), 5, 0, 0, SWP_NOSIZE))
        {
            MessageBox(hwnd, _T("Error at WM_SIZE"), _T("Error!"), MB_OK | MB_ICONERROR);
        }
    }
    break;

纯win32编程中是否有类似Anchors的东西?

【问题讨论】:

    标签: c resources winapi


    【解决方案1】:

    您好,可能没有,因为 win32 api 是 windows 中大多数图形库的基础。如果您可以在项目中使用一些图形库,我可以向您推荐什么。

    【讨论】:

      【解决方案2】:

      让所有控制都是无意义的工作 按运行时防止它被编辑 通过 res 黑客?

      这不是没有意义的,这只是额外的工作。您还需要编写资源编辑器和/或布局管理器来简化您的工作。您可以定义和处理自己的资源定义文件,并将其作为自定义资源。

      里面有没有像 Anchors 这样的东西 纯win32编程?

      纯 win32 中没有布局管理器。但是您可能会找到一些免费的源代码来执行此操作。做一些最小的布局管理器相当容易。

      【讨论】:

        【解决方案3】:

        对话框的资源文件格式很古老。唯一对其有利的是对话单元抽象,这意味着对话会自动缩放以考虑用户首选的字体和显示 dpi 设置。

        除此之外,不支持锚点的对话格式。遗憾的是,Microsoft 尚未发布新的 UI 构建工具包,但用于原生开发,因此对于原生 Win32 应用程序,您必须在运行时手动创建/定位控件,以完成对话框资源无法满足的任何任务。

        WPF 显然更胜一筹,但需要 .NET

        我看不出以一种或另一种方式禁止 res 黑客的意义。通过阻止它,您可以获得什么?如果您自己的布局技巧如此糟糕以至于人们会想要“非法”重新布局他们的对话框,那么......好吧,我只能说。

        总结:

        • 尝试保护对话框布局毫无意义。如果你自己的布局是#@%^,那么你可以通过限制人们只会诉诸的东西来实现什么。
        • 但是,您可能希望在运行时创建控件,因为对话框资源格式缺少锚点等现代功能。尽管继续按照字体度量而不是像素为单位设计表单是一个好主意。
        • 如果您想要一个带有锚点的预构建“表单”布局系统,Win32 无法帮助您。如果您想要一个跨平台的 c++ 解决方案,或者切换到 .NET 的 WPF,QT 框架都是强大的替代方案,可以让您利用现有的非 UI 代码。

        【讨论】:

        • 这是一个高性能和简单的应用程序,那么我不能在这里使用.net。不过没关系,我想我可以使用资源编辑器创建元素,然后在 WM_SIZE 上模拟锚点,为每个内容设置新位置。最后,我们有了 Ribbon,它看起来是一个在 C++ 上运行的漂亮 UI。
        • Ribbon 提供了一个不错的工具栏界面。就窗口主体的实际布局而言,还是靠自己。
        猜你喜欢
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 2011-02-13
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        • 2010-10-11
        • 2016-09-21
        相关资源
        最近更新 更多