本家のクラスライブラリレファレンスによれば WSCnwbase クラスは、
このクラスはウィンドウ資源を持たないクラスの基本となるサブクラスです。このサブクラスを基底とすると、ウィンドウ資源を持たないにもかかわらず、ウィンドウ資源を持つものと同じように振舞うことができます。
ということですが、実際には多くの「これウィンドウ資源持ってるよね」なクラスもここから派生されています。どういう事かというと、WSCnwabseはウィンドウの「属性」を管理しているクラスなので、ここから派生すれば、ウィンドウ資源を持っているクラスならそのままそれを使えるし、ウィンドウ資源を持っていないクラスでもウィンドウ属性があるかのように振る舞う事が出来る、ということではないかと思われます。
ちなみに、WSCnwbaseクラスから派生されていないUIパーツのクラスもあります。階層図 http://www.attocraft.jp/contents/blog/?p=271 を見れば分かるようにWSCwindow及びWSCform等のフォームのクラスは直接WSCbaseから派生しているのですが、これらは確かに確実にウィンドウ資源を持っているとは思われますけれども、WSCnwbaseを経由して派生させても良さそうな気がするところではあります。
WSCnwbaseクラスでは、下記のWSCbaseに実体があるメンバ変数にプロパティとしての名前を与えて外部からアクセス可能にしています。
プロパティ名 | 型 | 意味 |
---|---|---|
WSNname | char* | パーツのインスタンスの名前 |
WSNvis | WSCbool | 可視状態の制御フラグ |
WSNdet | WSCbool | 入力可能状態の制御フラグ |
WSNexport | WSCbool |
加えて下記のプロパティではその実体となるメンバ変数を自クラス内に定義した上でプロパティとしての名前を与えて外部からアクセス可能にしています。(意味が空欄になっているのは使ったことがなくてよく分からないプロパティです)
プロパティ名 | 型 | 意味 |
---|---|---|
WSNuserString | char* | ユーザー定義文字列 |
WSNuserValue | long | ユーザー定義値 |
WSNblinkRefreshing | WSCbool | |
WSNx | short | パーツの配置されるX座標 |
WSNy | short | パーツの配置されるY座標 |
WSNwidtd | WSCushort | パーツの幅 |
WSNheight | WSCushort | パーツの高さ |
WSNforeColor | short | パーツの前景色 |
WSNblinkFlag | WSCbool | ブリンクするかどうかのフラグ |
WSNtwinBlink | WSCbool | |
WSNblinkColor | short | |
WSNblinkRate | WSCuchar | ブリンクの周期 |
WSNanchorTop | WSCushort | 親ウィンドウの上辺からパーツの上辺までの距離 |
WSNanchorBottom | WSCushort | 親ウィンドウの下辺からパーツの下辺までの距離 |
WSNanchorLeft | WSCushort | 親ウィンドウの左辺からパーツの左辺までの距離 |
WSNanchorRight | WSCushort | 親ウィンドウの右辺からパーツの右辺までの距離 |
WSNanchorTopFlag | WSCbool | topアンカーを使うかどうかのフラグ |
WSNanchorBottomFlag | WSCbool | bottomアンカーを使うかどうかのフラグ |
WSNanchorLeftFlag | WSCbool | leftアンカーを使うかどうかのフラグ |
WSNanchorRightFlag | WSCbool | rightアンカーを使うかどうかのフラグ |
WSNmouse | WSCushort |
WSCnwbaseのコンストラクタでは下記のイベントトリガーの情報を基底クラスWSCbaseに登録しています。
イベントトリガ名 | トリガの意味 |
---|---|
WSEV_INITIALIZE | パーツが初期化されたことを通知します |
WSEV_SENSITIVE_CH | パーツの入力可否状態が変更されたことを通知します |
WSEV_VISIBLE_CH | パーツの可視状態が変化したことを通知します |
WSEV_PARENT_SENSITIVE_CH | 親パーツの入力可否状態が変更されたことを通知します |
WSEV_PARENT_VISIBLE_CH | 親パーツの可視状態が変化したことを通知します |
WSEV_EXPOSE | パーツの描画が必要なことを通知します |
WSEV_MOUSE_MOVE | マウスポインタが移動したことを通知します |
WSEV_MOUSE_IN | マウスポインタがパーツの領域内に入ったことを通知します |
WSEV_MOUSE_OUT | マウスポインタがパーツの領域外に出たことを通知します |
WSEV_MOUSE_PRESS | マウスボタンのいずれかが押されたことを通知します |
WSEV_MOUSE_DOUBLE_CLICK | マウスボタンのどれかがダブルクリックされたことを通知します |
WSEV_MOUSE_RELEASE | マウスボタンのいずれかの押下状態が解消されたことを通知します |
本家のトリガ仕様の表にはパーツのデストラクタが実行されたタイミングを通知するWSEV_DELETEというのもあるのですが、WSCnwbase/WSCbaseを含めて明示的にこれをイベントトリガとして登録している派生クラスは見あたりません。このイベントは発生タイミングが特殊なので、コードの深い所(たぶんWSCbase)に直接埋め込まれているようです。
WSCnwbaseは重要なクラスですが、WSCbaseとは違い、このクラスを直接操作することはまずないでしょう。(特殊な機能を持つメンバ関数が幾つか定義されていますけれども、少なくともタンゴレンではこれらのメンバ関数は使っていません)
本家サイトのWSCnwbaseクラスの概要の説明と関数/プロパティ/イベントのトリガの一覧はこちら http://www.widestudio.org/ja/ht-ref/WSCnwbase.html にあります。