WideStudio Programming (5-2)
~WSCnwbase

本家のクラスライブラリレファレンスによれば 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 にあります。