Visual Studio资源编译错误RC2104完全解决指南

问题现场

环境 : Microsoft Visual Studio, MFC项目
错误信息:

复制代码
E:\CPP-Pro\repos\AllmageClassifier\AllmageClassifier.rc(114)
error RC2104 : undefined keyword or key name: SS_REALSIZECONTROL

原始代码

cpp 复制代码
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#ifndef APSTUDIO_INVOKED
#include "targetver.h"
#endif
#include "afxres.h"
#include "verrsrc.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// 中文(简体,中国) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#ifndef APSTUDIO_INVOKED\r\n"
    "#include ""targetver.h""\r\n"
    "#endif\r\n"
    "#include ""afxres.h""\r\n"
    "#include ""verrsrc.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
    "#define _AFX_NO_OLE_RESOURCES\r\n"
    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
    "\r\n"
    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n"
    "LANGUAGE 4, 2\r\n"
    "#include ""res\\AIImageClassifier.rc2""  // 非 Microsoft Visual C++ 编辑的资源\r\n"
    "#include ""l.CHS\\afxres.rc""      // 标准组件\r\n"
    "#if !defined(_AFXDLL)\r\n"
    "#include ""l.CHS\\afxribbon.rc""   // MFC 功能区和控制条资源\r\n"
    "#endif\r\n"
    "#endif\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Icon
//

// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME           ICON                    "res\\AIImageClassifier.ico"


/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "关于 AIImageClassifier"
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    ICON            IDR_MAINFRAME,IDC_STATIC,14,14,21,20
    LTEXT           "AIImageClassifier,版本 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
    LTEXT           "版权所有 (C) 2025",IDC_STATIC,42,26,114,8
    DEFPUSHBUTTON   "确定",IDOK,113,41,50,14,WS_GROUP
END

IDD_AIIMAGECLASSIFIER_DIALOG DIALOGEX 0, 0, 800, 400
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "AI图像分类工具"
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    LTEXT           "源图像路径:",IDC_STATIC,15,20,41,8
    EDITTEXT        IDC_EDIT_SOURCE_PATH,59,14,110,14,ES_AUTOHSCROLL | ES_READONLY
    PUSHBUTTON      "选择",IDC_BUTTON_BROWSE_SOURCE,172,14,41,14
    LTEXT           "输出图路径:",IDC_STATIC,15,40,41,8
    EDITTEXT        IDC_EDIT_OUTPUT_PATH,59,34,110,14,ES_AUTOHSCROLL | ES_READONLY
    PUSHBUTTON      "选择",IDC_BUTTON_BROWSE_OUTPUT,172,34,41,14
    LTEXT           "模型源路径:",IDC_STATIC,15,60,41,8
    EDITTEXT        IDC_EDIT_MODEL_PATH,59,54,110,14,ES_AUTOHSCROLL | ES_READONLY
    PUSHBUTTON      "选择",IDC_BUTTON_BROWSE_MODEL,172,54,41,14
    PUSHBUTTON      "加载模型",IDC_BUTTON_LOAD_MODEL,16,76,197,14
    GROUPBOX        "模型类别列表",IDC_STATIC,16,99,79,150
    CONTROL         "",IDC_LIST_CATEGORIES,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,20,112,70,131
    CONTROL         "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,233,34,306,14
    CTEXT           "准备就绪",IDC_STATIC_STATUS,358,20,72,10,SS_CENTERIMAGE | SS_SUNKEN,WS_EX_CLIENTEDGE
    GROUPBOX        "分类结果统计",IDC_STATIC,233,71,306,94
    LTEXT           "统计信息将在这里显示",IDC_STATIC_STATS,240,83,294,77,SS_SUNKEN | SS_REALSIZECONTROL | WS_BORDER
    GROUPBOX        "图像预览",IDC_STATIC,606,14,179,153
    CONTROL         "",IDC_STATIC_PREVIEW,"Static",SS_BITMAP | SS_CENTERIMAGE | SS_SUNKEN,620,32,14,12,WS_EX_CLIENTEDGE
    GROUPBOX        "实时处理结果",IDC_STATIC,233,175,552,210
    CONTROL         "",IDC_LIST_RESULTS,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,263,196,481,132
    DEFPUSHBUTTON   "开始筛选",IDC_BUTTON_START,21,276,164,45
END


/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x40004L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "080404B0"
        BEGIN
            VALUE "CompanyName", "TODO: <公司名>"
            VALUE "FileDescription", "AIImageClassifier"
            VALUE "FileVersion", "1.0.0.1"
            VALUE "InternalName", "AIImageClassifier.exe"
            VALUE "LegalCopyright", "TODO:  (C) <公司名>。  保留所有权利。"
            VALUE "OriginalFilename", "AIImageClassifier.exe"
            VALUE "ProductName", "TODO: <产品名>"
            VALUE "ProductVersion", "1.0.0.1"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x804, 1200
    END
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
    IDD_ABOUTBOX, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 163
        TOPMARGIN, 7
        BOTTOMMARGIN, 55
    END

    IDD_AIIMAGECLASSIFIER_DIALOG, DIALOG
    BEGIN
        LEFTMARGIN, 8
        RIGHTMARGIN, 793
        TOPMARGIN, 6
        BOTTOMMARGIN, 393
    END
END
#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// AFX_DIALOG_LAYOUT
//

IDD_AIIMAGECLASSIFIER_DIALOG AFX_DIALOG_LAYOUT
BEGIN
    0
END


/////////////////////////////////////////////////////////////////////////////
//
// String Table
//

STRINGTABLE
BEGIN
    IDS_ABOUTBOX            "关于 AIImageClassifier(&A)..."
END

#endif    // 中文(简体,中国) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE 4, 2
#include "res\AIImageClassifier.rc2"  // 非 Microsoft Visual C++ 编辑的资源
#include "l.CHS\afxres.rc"      // 标准组件
#if !defined(_AFXDLL)
#include "l.CHS\afxribbon.rc"   // MFC 功能区和控制条资源
#endif
#endif

/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

错误代码定位

在资源文件第114行发现问题代码:

cpp 复制代码
LTEXT "统计信息将在这里显示",IDC_STATIC_STATS,240,83,294,77,SS_SUNKEN | SS_REALSIZECONTROL | WS_BORDER

根本原因

SS_REALSIZECONTROL不是Windows API有效的静态控件样式。可能是:

  • 资源编辑器生成的错误代码
  • 项目迁移导致的兼容性问题
  • 手动编辑资源文件时的拼写错误

解决方案

方案1:直接删除无效样式(推荐)

cpp 复制代码
LTEXT "统计信息将在这里显示",IDC_STATIC_STATS,240,83,294,77,SS_SUNKEN | WS_BORDER

方案2:替换为有效样式

如果需要文本自动调整功能,可使用:

cpp 复制代码
LTEXT "统计信息将在这里显示",IDC_STATIC_STATS,240,83,294,77,SS_SUNKEN | SS_LEFTNOWORDWRAP | WS_BORDER

方案3:改用编辑框控件

cpp 复制代码
EDITTEXT IDC_STATIC_STATS,240,83,294,77,ES_MULTILINE | ES_READONLY | WS_BORDER

有效静态控件样式参考

样式 功能
SS_LEFT 左对齐文本
SS_CENTER 居中对齐
SS_RIGHT 右对齐
SS_SIMPLE 简单静态文本
SS_LEFTNOWORDWRAP 左对齐不换行
SS_ENDELLIPSIS 文本过长显示省略号
SS_NOPREFIX 不处理&字符为快捷键

修复步骤

  1. 在解决方案资源管理器中双击.rc文件
  2. 右键选择"查看代码"切换到文本视图
  3. 定位到错误行(第114行)
  4. 删除SS_REALSIZECONTROL标识符
  5. 保存文件并重新生成解决方案

验证结果

修复后代码:

cpp 复制代码
LTEXT "统计信息将在这里显示",IDC_STATIC_STATS,240,83,294,77,SS_SUNKEN | WS_BORDER

编译通过,功能正常。

经验总结

  • 避免手动修改资源文件,优先使用资源编辑器
  • 迁移项目时注意样式定义的平台兼容性
  • 熟悉常用的Windows控件样式,避免使用未文档化的标识符
  • 定期清理资源文件中无效或过时的样式定义

此问题属于典型的资源编译器语法错误,通过替换为有效样式标识符即可解决。

相关推荐
深念Y1 天前
删除IDEA中的JDK列表项
java·ide·jdk·intellij-idea·idea·sdk
安全渗透Hacker1 天前
IDEA 中主流 API 插件对比及实操建议
java·ide·intellij-idea
不爱编程爱睡觉1 天前
vscode下载/常用插件分享及如何链接Ubuntu
ide·vscode·ubuntu
love530love1 天前
EPGF 新手教程 13在 PyCharm(中文版 GUI)中创建 Hatch 项目环境,并把 Hatch 做成“项目自包含”(工具本地化为必做环节)
开发语言·ide·人工智能·windows·python·pycharm·hatch
ziyue75751 天前
idea不能使用低版本插件问题解决
java·ide·intellij-idea
环黄金线HHJX.1 天前
【MCP: Tuan编程 + Qt架构 + QoS - 量子-经典混合计算管理控制平台】
ide·人工智能·qt·编辑器·量子计算
MindCareers1 天前
Beta Sprint Day 5-6: Android Development Improvement + UI Fixes
android·c++·git·sql·ui·visual studio·sprint
tiandyoin1 天前
visual studio 克隆 github 时,如何保持行尾符与 github 一致
ide·github·visual studio
FL16238631291 天前
Visual Studio Installer无法启动安装程序。错误:系统找不到指定的文件。
ide·visual studio
love530love1 天前
EPGF 新手教程 11在 PyCharm(中文版 GUI)中创建 uv 环境,并把 uv 做到“项目自包含”(工具本地化为必做环节)
ide·人工智能·python·pycharm·conda·uv·epgf