ボタンのイベント処理のサンプル

ウインドウ上にボタンを配置してイベントを処理するサンプルコードです。

#include <Windows.h>
#include <balor/gui/all.hpp>

using namespace balor::gui;


int APIENTRY WinMain(HINSTANCE , HINSTANCE , LPSTR , int ) {
	Frame frame(L"ButtonAndEvent");

	Button button0(frame, 10, 10, 100, 50, L"button0");
	button0.onClick() = [&] (Button::Click& ) {
		MsgBox::show(L"button0 clicked");
	};
	Button button1(frame, 10, 80, 100, 50, L"button1", [&] (Button::Click& ) {
		MsgBox::show(L"button1 clicked");
	});

	frame.runMessageLoop();
	return 0;
}


balor ライブラリの導入

balor ライブラリの導入方法を解説します。


まずPCに Visual C++ 2010 以降がインストールされていない場合はインストールして下さい。
次にダウンロードした balor の圧縮ファイルを適当なディレクトリに解凍します。
解凍したディレクトリ内の「samples」の中にサンプルプロジェクトがあるので
Visual C++ でそのままコンパイルできることを確認します。


Visual C++ を起動し、「Win32 プロジェクト」を新規作成します。
プロジェクトのプロパティを開いて


構成プロパティ>VC++ディレクトリ>インクルードディレクト
に balor ディレクトリ内の「include」ディレクトリを追加します。


構成プロパティ>VC++ディレクトリ>ライブラリディレクト
に balor ディレクトリ内の「lib」ディレクトリを追加します。


以上の設定で balor ライブラリが使えるようになりました。
試しに以下の Hello world サンプルコードをコンパイルして見て下さい。

#include <Windows.h>
#include <balor/gui/all.hpp>

using namespace balor::gui;


int APIENTRY WinMain(HINSTANCE , HINSTANCE , LPSTR , int ) {
	Frame frame(L"Hello world");
	frame.onPaint() = [&] (Frame::Paint& e) {
		e.graphics().drawText(L"Hello world", 20, 10);
	};
	frame.runMessageLoop();
	return 0;
}

ライセンス

balor ライブラリについて著作権は放棄しません(できない)が
配布条件はパブリックドメインソフトウェア (public domain software, PDS)と同等とします 。
非商用、商用を問わず使用にあたり制限はありません。
本ライブラリを使用することで生じたいかなる損害についても責任は全て使用者当人が負います。

balor 1.0.0 リリース

balor バージョン 1.0.0 をリリースしました。

ダウンロードする。

変更点

これが初版リリースです。

今後の予定

balor とは

balor は C++ Windows GUI ライブラリです。
Java .NET のように手軽で使いやすく、
MFC のように WIN32 API と連携しやすいライブラリを目指します。

特徴

  • .NET や Java ライクなインターフェース。
  • WIN32 APISTL と連携しやすい。
  • 無名関数(ラムダ式)によるイベント記述。
  • スタティックリンクライブラリ
  • 右辺値参照サポートによってインスタンス作成にヒープメモリ割り当てを強制しない。
  • WinMain 関数を自分で書ける。
  • ライブラリヘッダファイルに windows.h をインクルードしない。
  • インテリセンスで関数のコメント表示。

Hello world サンプルコード

#include <Windows.h>
#include <balor/gui/all.hpp>

using namespace balor::gui;


int APIENTRY WinMain(HINSTANCE , HINSTANCE , LPSTR , int ) {
	Frame frame(L"Hello world");
	frame.onPaint() = [&] (Frame::Paint& e) {
		e.graphics().drawText(L"Hello world", 20, 10);
	};
	frame.runMessageLoop();
	return 0;
}


対応開発環境

Visau C++ 2010 Express Edition 以降

動作環境

Windows XP 以降

DLL をまたいだ balor ライブラリの使用方法

balor ライブラリはスタティックリンクライブラリなので通常 DLL を添付する必要はありません。
Hello world サンプルプログラムも exe の大きさは 57kb 程度ですみます。

しかしスタティックリンクライブラリということは
exe ファイルのプロジェクトと exe ファイル内で使う DLL のプロジェクトの
両方で balor ライブラリを使用した場合、それぞれにライブラリが別々にリンクされて
グローバル変数領域が複製されてしまいます。
これではライブラリの動作に問題が出てしまうのでこのような場合は
exe ファイルと一緒に balor_singleton.dll を添付する必要があります。
この dll は balor ライブラリの lib ディレクトリの中に入っています。
balor はグローバル変数にアクセスする前にこの dll の存在を調べ、
見つかった場合はグローバル変数が既に取得済みかどうかを dll に聞きにいきます。
こうして balor を複数のプロジェクトにリンクしている場合でも
グローバル変数が複製されずにすみます。
この仕組みは balor ライブラリのクラスである balor::Singleton クラスに実装されているので
balor ライブラリから使うことができます。