- #includeの指定
C-Partsで使用する関数・クラスのヘッダファイルを#includeで指定します。
//C-Partsで使用するヘッダ類
#include "CPartsMain.h"
#include "CPWindow.h"
#include "CPLabel.h"
#include "CPEditBox.h"
#include "CPPushButton.h"
#include "CPGroup.h"
#include "CPProgressBar.h"
#include "CPCheckBox.h"
#include "CPRadioButton.h"
#include "CPSlider.h"
#include "CPTab.h"
#include "CPComboBox.h"
#include "CPSpin.h"
#include "CPSpinEditBox.h"
#include "CPImage.h"
#include "CPartsSI.h" //C-Parts - Shade のブリッジ
このとき、「#include "CPartsMain.h"」は必ず先頭に指定するようにしてください。
- 常駐プラグインにする
extern_c bool STDCALL is_resident (const IID &iid, int i, void *) {
//必ず常駐させる
return true;
}
プラグインのグローバル関数の「is_resident()」において、trueを返して常駐プラグインにします。
- plugin_interfaceのscene_opened
ここで、C-Partsの初期化処理を行います。
virtual void scene_opened (sxbool &b, scene_interface *scene, void * = 0) {
//C-Parts初期化処理
CPartsSI_Initialize(scene);
}
C-Parts Ver1.07以前(ShadeR5以前)は、各インターフェースのコンストラクタで「CPartsSI_Initialize」を呼び出していましたが、
この位置が「scene_opend」に移行し、引数にscene_interfaceのポインタを渡している点に注意してください。
「C-Parts - Shadeブリッジ」の「CPartsSI_Initialize()」により、Shadeが起動したときにC-Partsの初期化が行われるようになります。
複数のC-Partsを使ったプラグインが存在する場合は、この処理が複数呼ばれることになりますがC-Parts本体である共有ライブラリ「CPartsLib.dll」は、
1回分の初期化処理しか行いませんので支障はありません。
- plugin_interfaceのデストラクタ
ここで、C-Partsの終了処理を行います。
~plugin_component () {
//C-Partsの終了
CPartsSI_Terminate();
}
「C-Parts - Shadeブリッジ」の「CPartsSI_Terminate()」により、Shadeが終了するときにC-Partsの後処理が行われるようになります。
複数のC-Partsを使ったプラグインが存在する場合は、この処理が複数呼ばれることになりますがC-Parts本体である共有ライブラリ「CPartsLib.dll」は、
1回分の終了処理しか行いませんので支障はありません。
- C-PartsのGUI部品をprivateで定義
C-PartsのGUI部品として使用するクラスの実体をShadeプラグインクラスのprivateとして定義します。
private:
CPWindow cp_win;
CPPushButton cp_butClose;
- ダイアログの生成
cp_win.Clear();
if(cp_win.CreateNewDialog("テストダイアログ",120,120,160,80)<0){
shade->message("CreateNewDialog failed!!");
return;
}
cp_win(CPWindowクラス)のメソッド「Clear()」で情報を初期化した後に、
「CreateNewDialog()」でダイアログを生成しています。
スクリーン上の(120,120)の位置に(160x80)のサイズのダイアログを生成します。
- プッシュボタンの配置とコールバック関数の登録
//「閉じる」ボタンの配置
cp_butClose.SetText("閉じる");
cp_butClose.SetBounds(20,20,120,24);
cp_butClose.AttachSelectEvent(this->OnClose);
cp_butClose(CPPushButtonクラス)のメソッド「SetText()」で表示文字列を指定し、
「SetBounds()」で表示位置とサイズを指定します。
「AttachSelectEvent()」で、ボタンが押されたときにどのstatic関数を呼び出すか指定します。
ここでは「this->OnClose」となっていますが、これは今のクラス(this)の「OnClose()」を指定したことになります。
コールバック関数「OnClose」は以下のようになります。
static void OnClose(CPPushButton *lpBut)
{
lpBut->GetParentWindow()->CloseWindow(); //ウィンドウを閉じる
}
コールバック関数の制約として、staticの静的関数として記述する必要がある点に注意してください。
コールバック関数の引数は、イベントを発生させたプッシュボタン(CPPushButton : cp_butClose)へのポインタとなります。
「GetParentWindow()」で親となるCPWindow(cp_win)を取得し、
メソッド「CloseWindow()」を呼び出します。
これで、モーダルダイアログに対して閉じる(イベントループから抜ける)命令を送ります。
- ツールヒントの文字列を指定
cp_butClose.SetHintText("ダイアログを閉じます。");
「SetHintText()」でツールヒントの文字列を指定します。
これにより、ボタンの上にマウスカーソルが来たときに、ここで指定した文字列がポップアップで表示されるようになります。
- ダイアログにプッシュボタンを追加
cp_win.Add(&cp_butClose);
cp_winクラス(CPWindow)に、cp_butClose(CPPushButton)を追加します。
これで、初めて土台となるダイアログにプッシュボタンが結びついたことになります。
- モーダルダイアログのイベントループ
cp_win.DoModal();
モーダルダイアログを表示し、イベントループを行います。
ウィンドウの「閉じるボタン」が押されるか、「CPWindow::CloseWindow()」が呼ばれるとイベントループから抜けます。