2007-03 / 2007-03-14

前のエントリ: 強制make [command]
次のエントリ: DEATH NOTE the Last name (ネタバレ) [diary]

cygwin/MinGW で Windows GUIアプリ
2007-03-14-1 / カテゴリ: [programming][win][cygwin][c] / [permlink]

朝、目覚まし時計に反応できるようになった今日この頃。2度寝しないように「うりゃ!」と叫んでなんとか頑張ってる。

cygwin の gcc でも、WinMain 関数で普通にコンパイルできるのね。
-mno-cygwin オプションで、cygwin1.dll をリンクしないネイティブアプリ、
-mwindows オプションで、GUIアプリができる。
(-mwindows がないと、exe実行時にコマンドプロンプトも表示されてしまう)

関連:bcc でWindowsプログラミングのコンパイル[2005-08-01-1]

スケルトン

skelton.c
#include "skelton.h"

// compile:
// gcc -mno-cygwin -mwindows skelton.c

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow )
{
	MessageBox(NULL, "message", "title", MB_OK);

	return 0;
}

skelton.h
#ifndef __SKELTON_H
#define __SKELTON_H

#include <windows.h>

#endif

makefile
OBJS = skelton.o
TARGET = skelton.exe
OPT = -mno-cygwin -mwindows

all:	$(TARGET)

$(TARGET):	$(OBJS)
	gcc $(OPT) -o $@ $(OBJS)

.c.o:
	gcc -c $<

clean:
	-rm -f $(TARGET) $(OBJS) *~ \#* core

# dependency
skelton.o:	skelton.h

実行結果
スケルトン 実行結果

日本語もOK
スケルトン 実行結果(ja)



リソースコンパイラは binutils パッケージに含まれる windres コマンド。
でも、アイコンの埋め込みは OK だったけど、日本語メニューは文字化け…。cygwin の windres は日本語(のメニュー)には対応していないっぽい。
#include "resource.h"

// Menu
IDM_SKEL2MENU MENU
BEGIN
	POPUP "ファイル(&F)"
	BEGIN
		MENUITEM "終了(&X)",	IDM_END
	END
	MENUITEM "ヘルプ(&H)",	IDM_HELP
END

// Icon
IDI_ICON	ICON	"skelton2.ico"
IDI_ICONS	ICON	"skelton2s.ico"
日本語メニュー(化け)

日本語のメニューはMinGW日本語版の、windres (2007-03-14現在 windres214)と、mingw-jp (2007-03-14現在 mingw-jp-20040224)に含まれる libiconv-2.dll を使ってコンパイルすれば OK
cygwin パッケージにも libiconv2 があるけど、libiconv-2.dll ファイルは入ってないっぽい(libiconv2 ver 1.11-1)ので、/usr/local/bin あたりに、MinGW の windres と libiconv-2.dll を入れておく。
日本語メニュー

windres の書式は他と互換性が低いらしいけど、他を知らないから関係ないや^^;
とりあえず makefile
OBJS = skelton2.o
TARGET = skelton2.exe
OPT = -mno-cygwin -mwindows
RES = skelton2.coff
CLANG = C-SJIS

.SUFFIXES: .coff .rc

all:	$(TARGET)

.c.o:
	gcc -c $<

.rc.coff:
	CLANG=$(CLANG) /usr/local/bin/windres -i $< -o $@

clean:
	-rm -f $(TARGET) $(OBJS) $(RES) *~ \#* core

$(TARGET):	$(OBJS) $(RES)
	gcc $(OPT) $(RES) -o $@ $(OBJS) $(LIBS)

# dependency
skelton2.o:	skelton2.h
skelton2.o:	resource.h
skelton2.coff:	skelton2.rc
skelton2.coff:	resource.h
前のエントリ: 強制make [command]
次のエントリ: DEATH NOTE the Last name (ネタバレ) [diary]

2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2013-05-02 16:12