win32编程中的资源和控制位置

时间:2010-12-14 12:14:16

标签: c resources winapi

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

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

在Windows窗体(.net)或Borland Delphi(VCL)中创建的GUI无法使用res hacker进行编辑,也许它会在运行时创建控件。

是否一项毫无意义的工作是通过运行时制作所有控件以防止它被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这样的东西?

3 个答案:

答案 0 :(得分:3)

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

除此之外,锚点的对话框格式没有支持。微软遗憾地没有发布新的UI构建工具包,但是对于本机开发而言,对于Native Win32应用程序,您无法在运行时手动创建/定位控件,以用于对话资源无法满足的任何任务。

WPF显然更优越,但需要.NET

我没有看到以这种或那种方式禁止res hacking的观点。你通过预防获得了什么?如果你自己的布局技巧非常糟糕,以至于人们会想要“非法地”重新布局他们的对话框,那么......我能说的就是wtf。

总结:

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

答案 1 :(得分:1)

  

毫无意义的工作是否能够完成所有控制   通过运行时来防止它被编辑   通过res hacker?

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

  

是否有像Anchors这样的东西   纯win32编程?

纯win32中没有布局管理器。但是你可能会找到一些免费的源代码来做到这一点。做一些最小的布局管理器相当容易。

答案 2 :(得分:0)

嗨,可能没有因为win32 api是Windows中大多数图形库的基础。如果您可以在项目中执行此操作,我建议您使用一些图形库。