2011-01-24 3 views
2

Я экспериментирую с API Win32 на C++, в частности с написанием файлов ресурсов. Теперь весь мой проект работал отлично, меню и названия и все такое. Однако, когда я добавить этот код для модального диалогового окна в файл .rc:Почему Windres сообщает о синтаксической ошибке в моей инструкции GROUPBOX?

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,

The GROUPBOX statement, which you can use only in a DIALOGEX statement, defines the text, identifier, dimensions, and attributes of a control window.

GROUPBOX text, id, x, y, width, height [, style [, extended-style]]

Их пример:

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

Что я делаю неправильно?

ответ

3

Если вы по-прежнему имеют одинаковую синтаксическую ошибку на той же строке, после переключения на DIALOGEX заявление (как @YeenFei указал), единственное, Я могу думать, что IDC_STATIC не определен.

Попробуйте изменить его

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

Если исправляет эту проблему, это потому, что идентификатор не определен.

Я сделал поиск в заголовках платформ SDK (6.1 и 7.1) и не нашел его. Я думаю, что это может быть идентификатор, специфичный для MFC. Некоторые быстрые подсказки показывают, что MFC определяет его в «afxres.h», если он еще не определен.

IDOK и IDCANCEL Работайте, хотя вы явно не определяете их, потому что они определены в Platform SDK (в «winuser.h»).

+0

IDC_STATIC также определен в winuser.h –

+0

@KenB: Это не так. Это контрольное значение, которое обычно берется из специфического для проекта ресурса.h. См. Любую из многочисленных примеров программ в SDK Windows Platform. –

+0

Я только что использовал grep и нашел, что он определен не только в winuser.h, но и в afxres.h. –

4

Я думаю, что это в значительной степени понятны из

can use only in a DIALOGEX statement

+0

Ха, я пропустил это, спасибо. Но, к сожалению, это не устранило проблему. –

Смежные вопросы