etc.negui.negui

NeGui。
Windows APIを薄皮一枚で繋げるラッパー。 当初はGUIのみを対象にしてたけど段々と変な方へ走り出してる。
BUGS:
関連する識別子の統一をしたい。
refだったりポインタだったり、constだったりそうじゃなかったり。 型も属性も何の統一性も無いなー。
Note:
コールバック関数をdelegateに置き換えたい。
History:
1.100: [@] NeGuiから一応の分離。役割は変わらず。
1.062: [S] deprecated修正。
struct NEGUIINFO;
History:
1.022: [S] 名称変更。
1.021: [S] メンバ名変更。
1.00β15: [P] sizeメンバ追加。拡張コンボボックス対策。 [P] pointメンバ追加。size追加した整合性のため。
DWORD exStyle;
拡張ウィンドウスタイル。
Text className;
ウィンドウクラス名。
DWORD style;
ウィンドウスタイル。
NeGui owner;
親。
ITEM_ID id;
アイテムID。
bool eventLoop;
イベントループを自前で持つか。
POINT point;
初期位置。
SIZE size;
初期サイズ。
const Text toText();

abstract class NeGui: etc.negui.system.text.ITitleText;
GUIオブジェクト操作用ラッパ。
取得関係のメソッドは内部がどうなっていようとconstとして処理する。
protected HANDLE hWnd;
操作ハンドル。
History:
1.060: [S] やっぱ名前はhWndだよね。
this(HWND hWnd );
コンストラクタ。
Object userObject;
オブジェクト。
GWLP_USERDATA代わりの共用体。
History:
1.021: [P] ユーザー領域の変更。
void* userData;
何か。
GWLP_USERDATA代わりの共用体。
History:
1.021: [P] ユーザー領域の変更。
protected HWND MakeNeGui(ref const NEGUIINFO NeGuiInfo );
GUI部分生成。
やっとこさthisと分離。
Throws:
ウィンドウハンドルが無効なときにNeGuiException。
History:
1.032: [B] エラーコードが無視されてたっぽい。 [S] 識別子合わせ。
1.00β15: 新規作成。 [P] 拡張コンボボックスのリストサイズが変になるっぽいので適当に初期値設定。
this(ref const NEGUIINFO NeGuiInfo );
NeGui生成。
Params:
NEGUIINFO NeGuiInfo
生成に必要な情報。
Throws:
生成失敗時にNeGuiException。
final const HWND opCall();
操作ハンドル取得。
final bool opEquals(Object obj );
final const bool opEquals(HANDLE Handle );
ハンドル比較。
INT NONE;
意味を成さないsend/post引数。
const final LRESULT send(UINT Message , WPARAM wParam , LPARAM lParam );
SendMessageラッパ。
BUGS:
constいいんだろうか。
const final LRESULT post(UINT Message , WPARAM wParam , LPARAM lParam );
PostMessageラッパ。
BUGS:
sendと同じく。
enum GWL;
アイテム情報取得フラグ。
EXSTYLE
拡張ウィンドウスタイルを取得します。
STYLE
ウィンドウスタイルを取得します。
WNDPROC
ウィンドウプロシージャへのポインタ、またはウィンドウプロシージャへのポインタを表すハンドルを取得します。ウィンドウプロシージャを呼び出すには、CallWindowProc 関数を使わなければなりません。
HINSTANCE
アプリケーションインスタンスのハンドルを取得します。
HWNDPARENT
親ウィンドウがある場合、そのハンドルを取得します。
ID
ウィンドウ ID を取得します。
USERDATA
ウィンドウに関連付けられた 32 ビット値を取得します。この 32 ビット値は、ウィンドウを作成したアプリケーションで使用する目的で各ウィンドウが持っているものです。この値の初期値は 0 です。
protected final LONG_PTR GetItemInfo(GWL Index );
protected final LONG_PTR SetItemInfo(GWL Index , LONG_PTR NewInfo );
const final LONG_PTR getItemInfo(int Index );
final LONG_PTR setItemInfo(int Index , LONG_PTR NewInfo );
Get/SetWindowLongPtrラッパ。
const final LONG_PTR exStyle();

final LONG_PTR exStyle(LONG_PTR NewInfo );

const final LONG_PTR style();

final LONG_PTR style(LONG_PTR NewInfo );

const final WNDPROC proc();

final WNDPROC proc(WNDPROC NewProc );

const final Text className(size_t ClassNameBuffer = (BUFFER).TEXT);
ウィンドウクラス名取得。
Windowsのウィンドウクラス名であってNeGuiのクラス名でないことに注意。
Params:
size_t ClassNameBuffer
取得するクラス名のサイズ。
Returns:
取得できたクラス名。
Throws:
何らかの失敗時にNeGuiException。
History:
1.021: [P] 固定値。
const final NeGui guiObject();
final NeGui guiObject(NeGui NewGuiData );

LayoutManager layoutManager;

static NeGui getGuiObject(HWND hWnd );
ウィンドウハンドルからそのNeGuiを取得/設定。
BUGS:
取れなかった場合にnullを返すようにせねば。
enum CLASSFLAG;
アイテムクラス情報取得フラグ。
ATOM
ウィンドウクラスを一意的に識別するアトム値を取得します。これは、RegisterClassEx 関数が返すアトムと同じです。
CBCLSEXTRA
クラスに関連付けられた拡張クラスメモリのサイズをバイト単位で取得します。
CBWNDEXTRA
ウィンドウに関連付けられた拡張ウィンドウメモリのサイズをバイト単位で取得します。このメモリへのアクセス方法については、GetWindowLongPtr 関数の説明を参照してください。
HBRBACKGROUND
クラスに関連付けられた背景ブラシのハンドルを取得します。
HCURSOR
クラスに関連付けられたカーソルのハンドルを取得します。
HICON
クラスに関連付けられたアイコンのハンドルを取得します。
HICONSM
クラスに関連付けられた小さいアイコンのハンドルを取得します。
HMODULE
クラスを登録したモジュールのハンドルを取得します。
MENUNAME
クラスに関連付けられたメニューリソースを識別するメニュー名文字列へのポインタを取得します。
STYLE
ウィンドウクラスのスタイルビットを取得します。
WNDPROC
ウィンドウプロシージャのアドレス、またはウィンドウプロシージャのアドレスを表すハンドルを取得します。ウィンドウプロシージャを呼び出すには、CallWindowProc 関数を使わなければなりません。
DWORD getClassInfo(CLASSFLAG Index );
DWORD getClassInfo(int Index );
GetClassLongラッパ。
ULONG_PTR setClassInfo(CLASSFLAG Index , LONG NewInfo );
ULONG_PTR setClassInfo(int Index , LONG NewInfo );
SetClassLongラッパ。
const Text text();
アイテムテキスト
void text(in Text text);
History:
1.100: [P] 真偽値ではなく例外を投げる。
bool number(T : int)(T Number );

const size_t textLength();
アイテムテキスト長取得
bool destroy();
自身を終了させる。
const bool isAlive();
Windowsシステム上で有効か。
bool enable(bool Enable );
const bool enable();
有効無効
bool update();
History:
1.100: [S] 名前変更(upDate -> update)
void reDraw(bool ReDraw );

bool invaliDateRect(ref const(RECT) Rect , bool BackErase );
bool invaliDateRect(bool BackErase );

const bool isChild(in NeGui gui );
指定アイテムは子供か。
Params:
NeGui gui
調べたい子供。
Returns:
成功すればtrue、失敗すればfalseを返す。
const NeGui child(ITEM_ID Id );
子アイテムの取得。
Params:
ITEM_ID Id
取得したいアイテムのID。
Returns:
指定アイテムが有効ならそのアイテム。
const NeGui child(ref const(POINT) Point );
クライアント座標から子アイテムの取得。
Params:
const(POINT) Point
クライアント座標。
Returns:
子アイテム。 指定座標に子アイテムが存在しなければ自身を返す。
Throws:
座標が変だった場合にはNeGuiExceptionを投げる。
alias EnumChildDelegate;

const bool enumChild(EnumChildDelegate dg );

const NeGui[] children();
History:
1.090: [P] EnumChildWindowsをdelegateに移行。
const NeGui parent();
親取得。
const NeGui root();

static NeGui pointToGui(ref const POINT Point );

const bool pointToClient(ref POINT Point );
スクリーン座標→クライアント座標
const bool pointToScreen(ref POINT Point );
クライアント座標→スクリーン座標
enum RELATION;
History:
1.00β16: [S] 名前をGWからRELATIONに変更。
CHILD
Z 順位が一番上の子ウィンドウを取得します。
FIRST
指定したウィンドウと同じタイプのウィンドウで、Z 順位が一番上のウィンドウを取得します。
LAST
指定したウィンドウと同じタイプのウィンドウで、Z 順位が一番下のウィンドウを取得します。
NEXT
Z 順位が、指定したウィンドウの次にあるウィンドウを取得します。
PREV
Z 順位が、指定したウィンドウの前にあるウィンドウを取得します。
OWNER
指定したウィンドウの親ウィンドウを取得します。
const NeGui relation(RELATION Relation );

bool toTop();
ウィンドウをZ順位の一番手前に持ってきて、アクティブにします
子ウィンドウの場合は、その子ウィンドウを所有する親ウィンドウがアクティブになります。
Returns:
成功すればtrue、失敗すればfalseを返す。
History:
1.090: [S] 名前変更(topMost -> toTop)
bool setShow(SHOW Show );

const bool isVisible();

bool foreGround();
フォアグラウンドへ設定。
Returns:
成功すればtrue、失敗すればfalse。
bool move(int x , int y , int Width , int Height , bool RePaint = true);

bool move(ref const RECT Rect , bool RePaint = true);
History:
1.00β17: 新規作成。
enum AFTER;

NONE
無指定。
BOTTOM
ウィンドウを Z 順位の一番下に設定します。最前面ウィンドウは同時に WS_EX_TOPMOST の指定が解除されます。
NOTOPMOST
最前面ウィンドウ(WS_EX_TOPMOST)指定を解除します。
TOP
ウィンドウを Z 順位の一番上に設定します。
TOPMOST
ウィンドウを最前面ウィンドウに設定します。最前面ウィンドウとは、常に最前面に表示されるウィンドウのことです。
enum SWP;

DRAWFRAME
再描画時に、ウィンドウの枠も再描画の対象とします。
FRAMECHANGED
ウィンドウ サイズが変更されない場合でも、WM_NCCALCSIZE メッセージを送ります。
HIDEWINDOW
ウィンドウを非表示にします。
NOACTIVATE
ウィンドウをアクティブ化しないようにします。
NOCOPYBITS
ウィンドウ再配置時に、クライアント領域の内容を破棄します。
NOMOVE
ウィンドウの現在の位置を維持します。X パラメータ、Y パラメータは無視されます。
NOOWNERZORDER
NOREPOSITION
オーナーウィンドウの Z 順位を変更しないようにします。
NOREDRAW
変更結果を再描画しないようにします。
NOSENDCHANGING
ウィンドウに WM_WINDOWPOSCHANGING メッセージを送らないようにします。
NOSIZE
ウィンドウの現在のサイズを維持します。cx パラメータ、cy パラメータは無視されます。
NOZORDER
現在の Z 順位を維持します。hWndInsertAfter パラメータは無視されます。
SHOWWINDOW
ウィンドウを表示します。
bool pos(AFTER After , int x , int y , int Width , int Height , SWP Flags );

bool reLoad();

bool topMost(bool TopMpst );
History:
1.090: [F] 最背面移動を強制。
bool position(in int x , in int y );
bool position(ref const(POINT) Point );
座標。
bool size(in int Width , in int Height );
bool size(ref const(SIZE) Size );
サイズ。
const SIZE clientSize();
アイテムのクライアントサイズを取得。
Returns:
アイテムのクライアントサイズ。
Throws:
NeGuiException
const RECT itemRect();
アイテムのスクリーン座標を取得。
Returns:
アイテムのスクリーン座標。
Throws:
NeGuiException
const SIZE itemSize();
アイテムのサイズを取得。
Returns:
アイテムサイズ。
Throws:
NeGuiException
const POINT itemPosition();

static NeGui getFocus();
呼び出し側スレッドのフォーカスアイテムを取得。
Returns:
失敗時にはnull。
History:
1.00β14: [S] final?
bool setFocus();

bool lockUpDate(bool Lock );

const HDC getDC();
デバイスコンテキストの取得。
bool releaseDC(HDC hDC );
デバイスコンテキストの解放。
 /+
 getDCとreleaseDCの使用。
 +/
 auto gui=new NeGui(HANDLE);

 auto hdc=gui.getDC();
 scope(exit) gui.releaseDC(hdc); // 解放。
Canvas canvas();
アイテムのCabvasを取得
Canvas beguinPaint(ref PAINTSTRUCT PaintStruct );
void endPaint(ref PAINTSTRUCT PaintStruct );
WM_PAINTの糖衣
const Icon getIcon(Icon.FIXED IconFixed );

Icon setIcon(Icon.FIXED IconFixed , in Icon icon );

const Font font();

void font(in Font font);

bool startHotKey(HOTKEY_ID Id , MOD Mod , KEY Key );

bool stopHotKey(HOTKEY_ID Id );

bool startTimer(TIMER_ID Id , DWORD ms , TIMERPROC TimerProc = null);
タイマー開始。
bool stopTimer(TIMER_ID Id );

void dropFile(bool Accept );

class OtherGui: etc.negui.negui.NeGui;

this(HWND hWnd );

NeGui GetGui(HWND hWnd );