閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

Win32 GUI Generics

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 との親和性が高いということなので、そのあたりを実感できるようなコードを書きたいなあ。気が向いたらもう少しいじってみようかな。とりあえず、後学のためにソースは読んでおきたいところですが、いかんせん時間が……。