以下のようなコードで実現できます。
# .rcほか、リソースファイルを用意する
実際に必要なのは```IDI_ICON ICON ~```行だけです。そのICONこれも実は文字列"ICON"とファイルパス以外は大した意味はないとか、他にもオプションが付けられるとかあるようです。
Win32アプリケーションプログラミングをマスターしたいわけではないので.rcファイルの記述はスルー。
.icoファイルですが、GIMPでいい加減に縮小するだけならいい加減に作れます。PNG透過の正方形画像を、512px, 64px,32px,16pxの順にレイヤ複製->レイヤ縮小を繰り返して、最後に.icoで保存しようとすると、アイコン形式画像を保存するウィザードが出てきてGIMPが良いようにしてくれます。
(64pxは48pxのほうがいいかもしれないけれどしていません。512pxもMacOSX対応にしては中途半端。)
Ubuntu16.04環境ではnautilusもeogもこの.icoを正しく描画できませんでしたが、Windowsではとしてはきちんとアプリケーションアイコンとして表示されたので問題ありません。
```
diff --git a/deploy/win/vecterion.rc b/deploy/win/vecterion.rc
new file mode 100644
index 0000000..ed229c3
--- /dev/null
+++ b/deploy/win/vecterion.rc
@@ -0,0 +1,24 @@
+#include <windows.h>
+
+//ICON
+IDI_ICON1 ICON DISCARDABLE "deploy/win/vecterion_icon.ico"
+
+1 VERSIONINFO
+FILEVERSION 0,0,0,1
+PRODUCTVERSION 0,0,0,1
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "080904E4"
+ BEGIN
+ VALUE "InternalName", "vecterion_vge"
+ VALUE "OriginalFilename", "vecterion_vge.exe"
+ VALUE "ProductName", "vecterion_vge"
+ VALUE "ProductVersion", "0.0.0.1"
+ VALUE "FileVersion", "0.0.0.1"
+ VALUE "CompanyName", "project daisy bell"
+ VALUE "LegalCopyright", "Michinari.Nukazawa"
+ VALUE "FileDescription", "Vecterion, the true vector graphics editor for linux (and other)."
+ END
+ END
+END
diff --git a/deploy/win/vecterion_icon.ico b/deploy/win/vecterion_icon.ico
new file mode 100644
index 0000000..bf8ade4
Binary files /dev/null and b/deploy/win/vecterion_icon.ico differ
diff --git a/deploy/win/vecterion_icon.xcf b/deploy/win/vecterion_icon.xcf
new file mode 100644
index 0000000..7ba9088
Binary files /dev/null and b/deploy/win/vecterion_icon.xcf differ
```
# Windowsリソースのオブジェクト作成します。
クロスビルドはbashスクリプトにしています。ここでリソース(.rc テキストのソース)をwindresでオブジェクトに変換します。
Makefileに入れるより楽そうで、やってみると、ビルド時間にほぼ影響がなかったので。
```
+# make resource(icon and other)
+TARGET_ARCH_WIN_RESOURCE=${OBJECT_DIR}/vecterion.res
+x86_64-w64-mingw32-windres ${ROOT_DIR}/deploy/win/vecterion.rc -O coff -o ${TARGET_ARCH_WIN_RESOURCE}
+
# build app source
CFLAGS_APPEND=-Wno-missing-include-dirs
[ -d ${GTK3LIBRARY_DIR}/lib/pkgconfig ]
export PKG_CONFIG_PATH=${GTK3LIBRARY_DIR}/lib/pkgconfig
-make TARGET_ARCH=win CC=x86_64-w64-mingw32-gcc CFLAGS_APPEND=${CFLAGS_APPEND} INCLUDE_APPEND="-mwindows"
+make TARGET_ARCH=win CC=x86_64-w64-mingw32-gcc CFLAGS_APPEND=${CFLAGS_APPEND} INCLUDE_APPEND="-mwindows" TARGET_ARCH_WIN_RESOURCE=${TARGET_ARCH_WIN_RESOURCE}
```
# リソースのオブジェクトをリンクします。
Windowsクロスビルド以外ではリソースのオブジェクトのパスを空文字にします。```diff --git a/Makefile b/Makefile
index 4f859f1..0aa22f9 100644
--- a/Makefile
+++ b/Makefile
@@ -71,6 +71,7 @@ $(APP_FILE) : $(OBJECTS)
$(CC) \
$^ \
$(OBJECT_DIR)/version.c \
+ $(TARGET_ARCH_WIN_RESOURCE) \
$(CFLAGS) \
$(INCLUDE) \
-o $(APP_FILE)
```
0 件のコメント:
コメントを投稿