【问题标题】:Why does Windres report a syntax error on my GROUPBOX statement?为什么 Windres 在我的 GROUPBOX 语句中报告语法错误?
【发布时间】:2011-01-24 05:02:45
【问题描述】:

我正在 C++ 中试验 Win32 API,特别是编写资源文件。现在,我的整个项目运行良好,菜单和标题等等。但是,当我将此模式对话框的代码添加到 .rc 文件时:

IDD_ABOUT DIALOG DISCARDABLE  0, 0, 239, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "My About Box"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "&OK",IDOK,174,18,50,14
    PUSHBUTTON      "&Cancel",IDCANCEL,174,35,50,14
    GROUPBOX        "About this program...",IDC_STATIC,7,7,225,52
    CTEXT           "An example program showing how to use Dialog Boxes\r\n\r\nby theForger", IDC_STATIC,16,18,144,33
END

Windres 退出并出现以下错误:

windres: resource.rc:40: syntax error

第 40 行指的是:

GROUPBOX "About this program...",IDC_STATIC,7,7,225,52

根据MSDN

只能在 DIALOGEX 语句中使用的 GROUPBOX 语句定义控制窗口的文本、标识符、尺寸和属性。

GROUPBOX 文字、id、x、y、宽度、高度[、样式[、扩展样式]]

他们的例子:

GROUPBOX "Options", 101, 10, 10, 100, 100

我做错了什么?

【问题讨论】:

    标签: c++ winapi resources groupbox


    【解决方案1】:

    如果切换到DIALOGEX 语句后在同一行仍然有相同的语法错误(正如@YeenFei 指出的那样),我唯一能想到的是IDC_STATIC 没有定义。

    试试改成

    GROUPBOX "About this program...",-1,7,7,225,52
    

    如果这样可以解决问题,那是因为没有定义标识符。

    我搜索了 Platform SDK 标头(6.1 和 7.1),但没有找到。我认为这可能是 MFC 特定的标识符——一些快速的谷歌搜索建议 MFC 在“afxres.h”中定义它,如果它尚未定义。

    IDOKIDCANCEL 可以工作,即使您没有明确定义它们,因为它们是在 Platform SDK 中定义的(在“winuser.h”中)。

    【讨论】:

    • IDC_STATIC 也在 winuser.h 中定义
    • @KenB:不是,不是。这是一个控制值,通常取自特定于项目的resource.h。查看 Windows 平台 SDK 中的众多示例程序。
    • 我刚刚使用了 grep,发现它不仅在 winuser.h 中定义,还在 afxres.h 中定义。
    • 我不知道为什么,但是由于某种原因定义 IDC_STATIC 可以解决它。
    • 我正在使用 MinGW 4.5.2。这是我在进一步检查头文件后得出的结论。 Winuser.h 确实记录了 IDC_STATIC;但是,它实际上并没有定义,因为它被 #if 0 语句包围,并带有注释指出,“这应该是由程序定义的,它没有在 w32api 标头中定义。我把它留在这里作为文档目的。”
    【解决方案2】:

    我认为这是不言自明的

    只能在 DIALOGEX 中使用 声明

    【讨论】:

    • 哈,我错过了,谢谢。但不幸的是,它并没有解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2023-02-08
    • 1970-01-01
    相关资源
    最近更新 更多