我在资源视图(Visual Studio)中向我的MFC项目添加了大量位图文件。但是,resource.h文件不会列出任何这些文件。我希望它们与.rc位图列表中添加的名称完全相同(比如名称为xxx) 我希望它列为#define IDB_xxx 如果我尝试单击.rc列表中的位图并导入它,它将被列为IDB_BITMAP1。由于文件数量很大,我不可能手动重命名它们以便在我的代码中使用。
答案 0 :(得分:2)
如果您只是将文件拖到资源视图上,它只需打开位图进行编辑。
所以你必须导入它们,然后你会将它们称为IDB_BITMAPn
要清理它,请关闭资源视图,然后在查看代码模式下打开.rc文件,找到包含新位图的部分并找到如下的新位图:
IDB_BITMAP4 BITMAP "C:\\picutre1.bmp"
IDB_BITMAP5 BITMAP "C:\\picutre2.bmp"
IDB_BITMAP6 BITMAP "C:\\picutre3.bmp"
所以现在写一个正则表达式将文件名替换为define,但我们也需要替换resource.h中的numbers部分。
为了使这最简单,请复制上述部分。
所以第一部分可以用这个visual studio替换正则表达式,你想要在所选区域上运行
^:i{:b+}BITMAP{:b+}"{.*\\}{.*}.bmp"
IDB_\4\1BITMAP\2"\3\4.bmp"
这将使它看起来像这样
IDB_picutre1 BITMAP "C:\\picutre1.bmp"
IDB_picutre2 BITMAP "C:\\picutre2.bmp"
IDB_picutre3 BITMAP "C:\\picutre3.bmp"
然后你要在所有IDB_pictureX字上做垂直选择(按住ATL键),然后按到上部(C#keymap CTRL + SHIFT + U)
现在将NEW IDB_X映射到旧值。我们可以使用sed来完成工作,或者制作一个重映射文件。
后者是通过使用原始.rc部分的副本完成的,并在所选区域上应用此替换正则表达式。
^{:i}:b+BITMAP:b+".*\\{.*}.bmp"
#define IDB_\2\t\t\1
给你这个代码块如下所示:
#define IDB_picutre1 IDB_BITMAP4
#define IDB_picutre2 IDB_BITMAP5
#define IDB_picutre3 IDB_BITMAP6
你可以做同样的ALT +选择更改为大写的定义,给出这个代码你可以放在头文件的某个地方:
#define IDB_PICUTRE1 IDB_BITMAP4
#define IDB_PICUTRE2 IDB_BITMAP5
#define IDB_PICUTRE3 IDB_BITMAP6
现在一个更干净的解决方案是构建一个sed命令文件,然后对你的resource.h运行它,你可以这样做
^{:i}:b+BITMAP:b+".*\\{.*}.bmp"
s/\1/IDB_\2/
,并提供:
s/IDB_BITMAP4/IDB_picutre1/
s/IDB_BITMAP5/IDB_picutre2/
s/IDB_BITMAP6/IDB_picutre3/
将该输出复制到文件中,并将其与sed -F标志
一起使用