Lily C++ GUI Library

[プログラミング,Lily]

Lily C++ GUI Library

Lilyって?

Lilyのアイコン Lily C++ GUI Library(以下, Lily)は、Windowsアプリケーション専用のGUI構築 & 2D画像処理ライブラリです。 C++でプログラムを作成するとき、大きなネックとなるのがウィンドウやボタンなどの準備です。 作りたいものがあるのに、その準備のGUIをつくるほうが時間がかかる……本当に煩わしいです。
そこで出身研究室のプログラミング支援のために作成をはじめたのが、このLilyです。約5年かけてライブラリを構築していきました。 あくまで個人活動で生まれたものではありますが、高頻出のGUIや基本的な2D画像処理用クラスを用意しており、 高いデザインの自由度を備えたライブラリにすることができました。もしかしたら?ゲームなんかも作れるかもしれません。 とはいえ、プログラムのお作法しらずな我流ライブラリですが…(^^;

Lilyでの開発の雰囲気は開発Tipsをご覧になると、どんな感じなのか少し伝わるのではないか…と思います。 こんな荒削りなサポートライブラリですが、皆様の開発の一助となれば、幸いです。

- 2009.02.26 渡辺賢悟 -


Lilyの入手・ダウンロード

Lilyの利用をご希望の方は、利用規約をお読みのうえ、ご利用ください。

Lily本体

ソフトウェア名バージョン種別ダウンロード
Lily Library(Visual Studio 2005用-x86)1.3.3一般公開Lily_vs2005_x86.zip
Lily Library(Visual Studio 2008用-x86)1.3.3一般公開Lily_vs2008_x86.zip
Lily Library(MinGW用-x86)1.3.3一般公開Lily_mingw.zip

Lilyの拡張機能(動画像処理など)

ソフトウェア名バージョン種別ダウンロード
Lily Library 拡張パック(Visual Studio 2005用-x86)1.3.3一般公開LilyExtensions_vs2005_x86.zip
Lily Library 拡張パック(Visual Studio 2008用-x86)1.3.3一般公開LilyExtensions_vs2008_x86.zip
(※MinGWでは拡張機能をサポートしていません)

LilyとOpenCVの併用プロジェクトファイル

ソフトウェア名バージョン種別ダウンロード
OpenCV with Lily (VS用プロジェクトファイル)VS2005,2008一般公開OpenCV_With_Lily.zip
(※設定法はこちらをご覧ください)

MinGW用コンパイル支援

ソフトウェア名バージョン種別ダウンロード
MinGWコンパイル支援ツール1.1.0フリーソフトMinGWSupport.zip

必要な開発環境

開発環境Visual Studio 2005(VC++8.0), Visual Studio 2008(VC++9.0), MinGW(※)
OSWindows XP, Vista
CPUPentium4 2.0GHz以上推奨
メモリ1GB以上推奨
(※MinGWでは動画像などを扱うLilyExtensionsが使えません)

利用規約・ライセンス条項

【著作権】
Lily C++ GUI Library本体(以下, Lily)の著作権は、開発者である渡辺賢悟に帰属します。
Lilyを用いて作られたアプリケーションの著作権は、開発したユーザに帰属します。
Lily内部で利用している以下のライブラリの著作権は、それぞれの開発者に帰属します。
  ・boost C++ (http://www.boost.org/)
  ・libjpeg (http://www.ijg.org/)
  ・zlib (http://www.zlib.net/)
  ・libpng (http://www.libpng.org/pub/png/libpng.html)

【利用について】
Lilyは本サイト(けん悟庵 http://kengolab.net/)および、開発者が許可したサイトでダウンロードした場合、
ダウンロードしたユーザ当人に限り、アプリケーション開発に利用する権利を有します。

【商用利用と連絡義務】
Lilyを用いて開発されたアプリケーションは商用利用が可能です。
Lilyを用いた開発物が金銭の授受に関係する場合は必ずご連絡ください。
その際、開発支援をご検討いただければ幸いです。
また、商用非商用にかかわらず、法人利用の場合、
Lily利用のご連絡をいただければありがたく存じます。

【免責事項】
Lilyの使用によって、いかなる問題が生じても開発者は一切の責任を負いません。
また、いかなる不具合が生じた場合でも、開発者バグ対応・サポートの義務はないものとします。
(ただし、開発者の個人意思による不具合対応はこの限りではありません。不具合報告は歓迎いたします)
商用・非商用・法人・個人問わず、Lilyの利用によって起きた損害については、ユーザにすべて責任が帰するものとし、
開発者は一切の責務を負わないものとします。
また、この文書の内容、プログラムの内容を予告なしに変更することがあります。

【転売・転載・二次配布について】
Lilyの”無断”の転売・転載・二次配布など、開発者の権利を侵害する行為全てを原則として禁じます。
Lilyを利用したビジネス、Lily本体を含む再配布等が発生する場合、必ず開発者にご連絡・ご相談ください。

【クレジットの義務】
Lilyを用いたアプリケーションは、Lily利用の旨を必ず記述してください(クレジット表記)。
LLCredit::show()を利用すると必要なクレジットが表示され、便利です。
  例:Lily Library, Kengo Watanabe (http://kengolab.net/)

Lily導入のメリット

1. コードが簡潔に書ける

Lilyを導入すると何が変化するのでしょうか。
Win32APIでGUIを作る場合と、LilyでGUIを作る場合をソースコードで比較してみます。

Win32APIの例
1
#include
<windows.h>
2
3
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
4
5
int
WINAPI WinMain(HINSTANCE curInst, HINSTANCE preInst, LPSTR cmd,
int
isShow){
6
MSG msg;
7
8
if
(!preInst){
9
WNDCLASS wc;
10
wc.style = CS_HREDRAW | CS_VREDRAW;
11
wc.lpfnWndProc = WndProc;
12
wc.cbClsExtra = 0;
13
wc.cbWndExtra = 0;
14
wc.hInstance = curInst;
15
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
16
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
17
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
18
wc.lpszMenuName = NULL;
19
wc.lpszClassName =
"wincls"
;
20
21
RegisterClass(&wc);
22
23
HWND hWnd;
24
hWnd = CreateWindow(
"wincls"
,
25
"ウィンドウ"
,
26
WS_OVERLAPPEDWINDOW,
27
50, 50, 300, 200,
28
NULL,
29
NULL,
30
curInst,
31
NULL);
32
33
ShowWindow(hWnd, SW_SHOW);
34
UpdateWindow(hWnd);
35
while
(GetMessage(&msg, NULL, 0,0)){
36
TranslateMessage(&msg);
37
DispatchMessage(&msg);
38
}
39
return
(msg.wParam);
40
}
41
return
0;
42
}
43
44
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam) {
45
HDC hdc;
46
PAINTSTRUCT ps;
47
HWND hButton;
48
49
HINSTANCE hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
50
51
switch
(msg) {
52
case
WM_CREATE:
53
hButton = CreateWindow(
54
"BUTTON"
,
"ボタン"
,
55
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
56
20, 20, 100, 30, hWnd, (HMENU)1, hInst ,NULL);
57
break
;
58
case
WM_PAINT:
59
hdc = BeginPaint(hWnd, &ps);
60
EndPaint(hWnd, &ps);
61
break
;
62
case
WM_DESTROY:
63
PostQuitMessage(0);
64
break
;
65
default
:
66
return
(DefWindowProc(hWnd, msg, wparam, lparam));
67
}
68
return
0;
69
}

Lilyの例
1
#include
<Lily/Lily.h>
2
3
int
main(
int
argc,
char
*argv[]){
4
LLExWindow *window =
new
LLExWindow(50, 50, 300, 200);
5
Lily::entryStage(window);
6
7
LLPushButton *bt1 =
new
LLPushButton(10, 10, 100, 30,
"ボタン"
);
8
window->entryChild(bt1);
9
10
while
(
true
) {
11
if
(Lily::update() == 0) {
break
; }
12
}
13
return
0;
14
}

通常の書き方では69行必要ですが,Lilyを用いると14行で済みます。 もっと大きなプログラムになると、さらに差が大きくなります。 特にGUIは規模が大きくなるほど複雑なコードを求められるようになるので、 少しでも簡潔にコーディングができる環境であれば、負担は減りますね。 Lilyは、そんな負担軽減のお手伝いができるライブラリです。

2. デザインフリーなGUI

LilyのすべてのGUIは、システムから独立した画像でできています。 下は標準のLilyのデザインですが、これらの画像を差し替えることができ、 好きな画像でGUIをデザインできます。
Lilyで作成したGUIの例