2016-01-28 1 views
2

У меня есть проект на C++ с MFC и файл ресурсов. В моем О-Диалоге я хочу добавить константу, которая содержит версию программы.Конкатенация строки и константы в файле ресурсов в C++ (MFC)

IDD_ABOUTBOX DIALOG DISCARDABLE 34, 22, 237, 65 
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU 
CAPTION "About Monitor" 
FONT 8, "MS Sans Serif" 
BEGIN 
    ICON   IDR_MAINFRAME, IDC_STATIC, 11, 22, 20, 20 
#ifdef __64BIT__ 
    LTEXT   "Communication Monitor V" APP_VERSION " x86_64", IDC_STATIC, 40, 13, 150, 8 
#else 
    LTEXT   "Communication Monitor V" APP_VERSION " x86_32", IDC_STATIC, 40, 13, 150, 8 
#endif //__64BIT__ 
    DEFPUSHBUTTON "OK", IDOK, 200, 6, 32, 14 
END 

Если это выглядит я получаю сообщение об ошибке

1>src\monitor.rc(80): error RC2116: expecting number for ID 
1>src\monitor.rc(80): error RC2108: expected numerical dialog constant 

Я также пытался объединить его с +

IDD_ABOUTBOX DIALOG DISCARDABLE 34, 22, 237, 65 
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU 
CAPTION "About Monitor" 
FONT 8, "MS Sans Serif" 
BEGIN 
    ICON   IDR_MAINFRAME, IDC_STATIC, 11, 22, 20, 20 
#ifdef __64BIT__ 
    LTEXT   "Communication Monitor V" + APP_VERSION + " x86_64", IDC_STATIC, 40, 13, 150, 8 
#else 
    LTEXT   "Communication Monitor V" + APP_VERSION + " x86_32", IDC_STATIC, 40, 13, 150, 8 
#endif //__64BIT__ 
    DEFPUSHBUTTON "OK", IDOK, 200, 6, 32, 14 
END 

, но я получаю ошибку

1>src\monitor.rc(80): error RC2237: numeric value expected at 3.1.4.1 

Моя следующая попытка w как называть его как функцию, которую я определил в верхней части моего rc-file, но ошибка была похожа на обе выше.

Можно ли конкатенировать строку и переменную в rc-файле внутри LTEXT?

+0

Пожалуйста, покажите линии arround line 80 monitor.rc. –

+2

Забудьте мой предыдущий комментарий. Ты не сможешь это сделать. Показать версию динамически. Это требует 3-4 строк кода в функции OnitiDialog диалогового окна About. –

+1

@MichaelWalz Thx для вашего ответа. Я реализовал его в своей функции OnInitDialog – Premox

ответ

2
#define HSTR(N) #N 
#define STR(N) HSTR(N) 
#define VER_TXT(N) Communication Monitor V##N x86_32 
#define VER_STR(N) STR(VER_TXT(N)) 

Работы на VS2013. Должен работать и на VS2010.

+0

Символы, содержащие двойное подчеркивание, или символы, начинающиеся с символа подчеркивания, за которым следует заглавная буква (или символы, начинающиеся с подчеркивания в глобальной области), зарезервированы для использования реализацией. – IInspectable

+0

@Inspectable У меня есть ответ. – ZDF

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