サブクラス化。
特定のお約束コードが必要。
- Examples:
class SubClassPush: Push, ISubClass {
private static extern(Windows) LRESULT SubClass_Proc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) {
alias EVENTS!(typeof(this)) EVENTLOOP;
mixin(EVENTLOOP.WM_TOP());
switch(Message) {
case WM_DESTROY:
mixin(EVENTLOOP.WM_DESTROY());
default:
mixin(EVENTLOOP.WM_LAST());
}
assert(false);
}
mixin(SMixInSubClass);
this(NeGui Owner, ITEM_ID Id) {
super(Owner, Id);
SubClassOnNeGuiConstructor();
}
protected override {
void OnDestroy() {
SubClassOnNeGuiDestructor();
super.OnDestroy();
}
}
}
class SubClass: etc.negui.system.raii.Raii, etc.negui.system.controller.IController;
サブクラス化情報保持クラス。
このクラスをそのまま使うんじゃなくてISubClassとSMixInSubClassを組み合わせて使用。
const WNDPROC subProc();
protected void Kill();
this(NeGui gui
, WNDPROC SubProc
);
bool start();
bool stop();
const bool isRunning();
LRESULT call(HWND hWnd
, UINT Message
, WPARAM wParam
, LPARAM lParam
);
abstract interface ISubClass;
サブクラス化を実装するNeGuiが持っとくべきもの。
サブクラス化のサブクラス化に対処するためprivateで実装。
非privateのときにstack overflowに。
privateでinterfaceって規格的にどうなんだろう。
string SMixInSubClass(in string SubclassObject
= "SubclassObject
", in string SubClass_Proc
= "SubClass_Proc
");
- History:
- 1.100
- source名前変更(TSubClass -> SMixInSubClass)。