C++ の GUI ライブラリ。大分前にダウンロードはしていたのですが、せっかくなので使ってみようということで Hello World を表示するプログラムを書いてみたのですが、うまく動かずに相当苦戦してしまった。今後も使うか解らないけれど、一応メモ。環境は VC++7.1 。
- ランタイムライブラリは「マルチスレッド」を使う(/MT)。シングルスレッドだとコンパイルが通らない。
- 「ランタイム型情報を有効にする」を有効にする(/GR)。有効にしないと実行時エラーが発生する。これに気付くのにとても苦労した……。
で、一応動作はするように。以下成果物。イベントハンドラも何も使っていないので、面白くもなんともありませんが。
#include <windows.h> #include <win32gui/window.hpp> #include <win32gui/frame.hpp> #include "resource1.h" using namespace win32::gui; //! Hello World を表示するダイアログ struct hello_dlg : public wnd_extend<dialog, hello_dlg> { static int dialog_id() { return IDD_HELLO; } }; int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { wnd<> top = create_wnd<sdi_frame>(null_wnd, create_info().rect(200, 200, 500, 300)); create_dlg<hello_dlg>(top); top->wait(); return 0; }
IDD_HELLO というのは、リソースIDです。
IDD_HELLO DIALOGEX 0, 0, 119, 39 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD EXSTYLE WS_EX_OVERLAPPEDWINDOW FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN LTEXT "Hello World",IDC_STATIC,7,7,106,25 END
上記のような形で定義してあります。というか、IDE に生成してもらった。これを実行すると、 Hello World を表示する StaticText を含むダイアログが表示されるようになります。
STL との親和性が高いということなので、そのあたりを実感できるようなコードを書きたいなあ。気が向いたらもう少しいじってみようかな。とりあえず、後学のためにソースは読んでおきたいところですが、いかんせん時間が……。