在.rc中添加的位图文件未在resource.h中列出

时间:2010-04-09 09:35:43

标签: visual-studio visual-studio-2005 bitmap resources

我在资源视图(Visual Studio)中向我的MFC项目添加了大量位图文件。但是,resource.h文件不会列出任何这些文件。我希望它们与.rc位图列表中添加的名称完全相同(比如名称为xxx) 我希望它列为#define IDB_xxx 如果我尝试单击.rc列表中的位图并导入它,它将被列为IDB_BITMAP1。由于文件数量很大,我不可能手动重命名它们以便在我的代码中使用。

1 个答案:

答案 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标志

一起使用