为何MSVC兼容的Windows资源定义无法被MinGW识别?
MinGW资源编译器拒绝CONTROL语句的原因及解决方法
MinGW配套的windres(GNU资源编译器)和MSVC的资源编译器在语法兼容性上存在差异,你的问题主要来自以下几个点:
CONTROL语句的控件类名必须加双引号
MSVC的资源编译器允许直接使用LISTBOX、BUTTON这类标识符作为控件类名,但windres要求必须用双引号将类名字符串包裹起来,否则会判定为语法错误。非ASCII字符的编码问题
资源文件中的全角字体名“MS Pゴシック”需要确保文件以Shift-JIS编码保存(日语Windows系统的默认编码)。windres对UTF-8编码的非ASCII字符解析支持不佳,容易引发无明确提示的语法错误。LANGUAGE语句的写法优化
虽然这不是直接报错原因,但将0x1替换为宏SUBLANG_JAPANESE_JAPAN能增强代码可读性,同时避免潜在的数值解析问题。
修改后的最简资源文件示例:
#include <windows.h> #include "..\winresource.h" IDD_THANKSFORPLAYING DIALOG 0, 0, 254, 196 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "SONIC & KNUCKLES COLLECTION Trial" LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN FONT 9, "MS Pゴシック" BEGIN CONTROL "", ID_THANKYOUFORPLAYING_MESSAGE, "LISTBOX", LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL, 7, 7, 240, 160 CONTROL "OK", ID_THANKSFORPLAYING_OK, "BUTTON", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 102, 175, 50, 14 END
额外注意事项:
在Code::Blocks中,还需确保项目设置里给windres添加编码参数:--codepage=932,强制编译器以Shift-JIS编码解析资源文件,避免字体名等非ASCII内容解析出错。
内容的提问来源于stack exchange,提问作者user16316067
相关产品推荐
相关产品推荐

