#uselib "filename" 外部DLLの指定HSPから呼び出す外部DLLのファイル名を指定します。
#func 新規名称 関数名 タイプ 外部DLL呼び出し命令登録外部DLLを呼び出すための新しい命令をコンパイラに登録します。
新規命令 p1,p2,p3,p4のようにパラメータを4つまで渡すことのできる命令となります。
(p1〜p3までのパラメータ) タイプ0 : 新規命令 p1,p2,p3,p4 ( p1=int, p2=int, p3=int ) タイプ1 : 新規命令 p1,p2,p3,p4 ( p1=変数バッファへのポインタ, p2=int, p3=int ) タイプ2 : 新規命令 p2,p3,p4 ( p1=BMSCR構造体へのポインタ, p2=int, p3=int ) タイプ3 : 新規命令 p1,p2,p3,p4 ( p1=変数情報PVAL構造体へのポインタ, p2=int, p3=int ) タイプ4 : 新規命令 p2,p3,p4 ( p1=int, p2=str, p3=int ) タイプ5 : 新規命令 p1,p2,p3,p4 ( p1=変数バッファへのポインタ, p2=str, p3=int ) タイプ6 : 新規命令 p2,p3,p4 ( p1=BMSCR構造体へのポインタ, p2=str, p3=int ) タイプ7 : 新規命令 p1,p2,p3,p4 ( p1=変数情報PVAL構造体へのポインタ, p2=str, p3=int ) タイプ$83 : 新規命令 p1,p2,p3,p4 ( p1=変数情報PVAL2構造体へのポインタ, p2=int, p3=int ) タイプ$87 : 新規命令 p1,p2,p3,p4 ( p1=変数情報PVAL構造体へのポインタ, p2=str, p3=int ) (p4のパラメータ) 各タイプ+$00 : p4=int 各タイプ+$10 : p4=システム変数refstrへのポインタ 各タイプ+$20 : p4=ファイルハンドルdpminfoへのポインタ 各タイプ+$30 : p4=パレットデータrgbptrへのポインタ (その他) $202 : HSPEXINFOタイプ関数 (Ver2.6以降専用) ( p1=HSPEXINFO構造体へのポインタ ) 各タイプ+$100 : HSP終了時に自動的に呼び出される関数 (クリーンアップ関数)の指定パラメータの表記で、intは数値、strは文字列となります。 intのパラメータが省略されている場合は、0がDLLに渡されます。 それ以外のパラメータの省略はできません。 p1が、BMSCR構造体へのポインタの場合はパラメータの数が1つ少なく なるので注意してください。
1.Visual C++で 新規作成 -> Win32 Dynamic-Link Library を選択、
新しいプロジェクトを作成します。
2.CまたはC++のソースファイルを作成して、プロジェクトに追加します。
3.HSPのDLLを作るためのヘッダファイル「hspdll.h」をインクルードして
ください。
4.タイプに応じた関数を作成して、その関数をEXPORTマクロでエクスポート
関数に指定します。
5.コンパイルしてDLLを作成します。
6.HSPで呼び出すための、#uselibと#funcを記述したテスト用のスクリプト
を作成して、呼び出せるかどうか確認してみる。
7.うまくいったら、あとはデバッグして完成。
もし、正常にリンクできなかったり、エクスポートできない場合は関数名
の指定の大小文字や、エクスポート名のチェックなどをしてみてください。
DLLにどんな名前がエクスポートされているかは、VC++付属のツールDUMPBIN
で確認することができます。「_関数名@16」という名前でエクスポートされ
ていれば正常です。
1.新規作成でDLL(ダイナミックリンクライブラリ)を選択、
新しいプロジェクトを作成します。
2.CまたはC++のソースファイルを作成して、プロジェクトに追加します。
3.HSPのDLLを作るためのヘッダファイル「hspdll.h」をインクルードして
ください。
4. DLL関数のエクスポート名を定義するための定義ファイル(DEFファイル)を
作成してください。
5.定義ファイル(DEFファイル)をプロジェクトに追加します。
6.タイプに応じた関数を作成して、その関数をEXPORTマクロでエクスポート
関数に指定します。(VC++での作成方法と同じです)
7.コンパイルしてDLLを作成します。
8.HSPで呼び出すための、#uselibと#funcを記述したテスト用のスクリプト
を作成して、呼び出せるかどうか確認してみる。
9.うまくいったら、あとはデバッグして完成。
一番問題となるのは、標準で出力されるC++ Builderのエクスポート関数名が、
VC++と異なっているため、HSPから関数名の認識ができなくなることです。
これを解決するために、モジュール定義ファイル(DEFファイル)を作成して、
それをプロジェクトに追加することで正常に認識されるようになります。
DEFファイルは、たとえば以下のように記述します。
EXPORTS _testfunc@16=testfunc上の例は、「testfunc」という名前の関数名を、「_testfunc@16」という 名前で外部にエクスポートするための定義です。HSPで認識されるためには、 「_関数名@16」という名前である必要があります。 このDEFファイルで、エクスポート関数名を定義することにより、HSPから 呼び出されるDLLを作成することが可能になります。
1.VCLを使わない時は、makファイル内のALLLIB行にあるvcl.lib を削除、
そしてcp32mt.lib を cw32mt.libに変更する。
さらに、最初にインクルード指定されている「#include 」
を削除し、かわりに「#include 」を記述する。
2.C++ Builder 3.0の場合は2.のmakファイルがbprファイルになっている
ので注意が必要です。また、bprファイル内のALLOBJ行にある、
「sysinit.obj も削除してください。
3.マルチスレッドを使用しない場合は、リンクするライブラリをcw32mt.lib
ではなくcw32.libにすることで、さらに少しサイズの節約ができます。
4.最終コンパイル時は、プロジェクトオプションのスピードを「リリース」
のモードにしておく。
EXPORT BOOL WINAPI test ( int p1, int p2, int p3, int p4 )
{
// start
// :
// end
return 0;
}
タイプ0 : 新規命令 p1,p2,p3,p4
( p1=int, p2=int, p3=int, p4=int )
[ test( int p1, int p2, int p3, int p4 ); ]
このタイプは、intの引数4つが渡されます。すべて32bit signed int
です。値が省略されている場合は0が渡されます。
タイプ1 : 新規命令 p1,p2,p3,p4
( p1=変数バッファへのポインタ, p2=int, p3=int, p4=int )
[ test( void *p1, int p2, int p3, int p4 ); ]
このタイプは、p2〜p4まではタイプ0と同じ32bit signed intです。
p1だけは、変数のバッファへのポインタになります。つまり、HSP側
では、「test a,2,3,5」のように最初に変数名が記述されていることが
前提になります。p1には、指定された変数の内容が格納されている
メモリへのポインタが入ります。数値型変数であれば、「*(int *)p1」
がその内容になり、変数の内容を直接書き換えることができます。
タイプ2 : 新規命令 p2,p3,p4
( p1=BMSCR構造体へのポインタ, p2=int, p3=int, p4=int )
[ test( BMSCR *p1, int p2, int p3, int p4 ); ]
このタイプは、HSP側ではp2〜p4までの3つのパラメータを取ります。
p2〜p4はタイプ0と同じ32bit signed intです。
タイプ3 : 新規命令 p1,p2,p3,p4
( p1=変数のPVAL構造体へのポインタ, p2=int, p3=int, p4=int )
[ test( PVAL *p1, int p2, int p3, int p4 ); ]
タイプ$83 : 新規命令 p1,p2,p3,p4
( p1=変数情報PVAL2構造体へのポインタ, p2=int, p3=int )
[ test( PVAL2 *p1, int p2, int p3, int p4 ); ]
このタイプは、p2〜p4まではタイプ0と同じ32bit signed intです。
p1だけは、指定した変数の情報を格納する構造体(PVALまたはPVAL2)
へのポインタになります。
HSP側では、「test a,2,3,5」のように最初に変数名が記述されて
いることが前提になります。
タイプ4 : 新規命令 p1,p2,p3,p4
( p1=int, p2=str, p3=int, p4=int )
[ test( int p1, char *p2, int p3, int p4 ); ]
タイプ5 : 新規命令 p1,p2,p3,p4
( p1=変数バッファへのポインタ, p2=str, p3=int, p4=int )
[ test( void *p1, char *p2, int p3, int p4 ); ]
タイプ6 : 新規命令 p2,p3,p4
( p1=BMSCR構造体へのポインタ, p2=str, p3=int, p4=int )
[ test( BMSCR *p1, char *p2, int p3, int p4 ); ]
タイプ7 : 新規命令 p1,p2,p3,p4
( p1=変数のPVAL構造体へのポインタ, p2=str, p3=int, p4=int )
[ test( PVAL *p1, char *p2, int p3, int p4 ); ]
タイプ$87 : 新規命令 p1,p2,p3,p4
( p1=変数情報PVAL2構造体へのポインタ, p2=str, p3=int )
[ test( PVAL2 *p1, char *p2, int p3, int p4 ); ]
これは、タイプ0〜3のp2パラメータが文字列になったものです。
p2には、文字列データへのポインタが渡されることになります。
タイプ+$10
( p1=??, p2=??, p3=??, p4=refstr )
[ test( … , char *p4 ); ]
それぞれのタイプに+$10する(bit4を立てる)と、p4のパラメータがなくなり
かわりにp4はシステム変数refstrへのポインタが渡されます。
つまり、p1,p2,p3のパラメータまではそれぞれのタイプと同じで、p4だけが
システム変数refstrへのポインタ(char *)になります。
これは、結果を文字列としてシステム変数に返したい時などに使用します。
(システム変数refstrには、4096文字までの文字列しか代入できませんので注意してください)
タイプ+$20
( p1=??, p2=??, p3=??, p4=dpminfo )
[ test( … , char *p4 ); ]
それぞれのタイプに+$20する(bit5を立てる)と、p4のパラメータがなくなり
かわりにp4はHSPのファイルシステム値dpminfoへのポインタが渡されます。
つまり、p1,p2,p3のパラメータまではそれぞれのタイプと同じで、p4だけが
dpminfoへのポインタ(char *)になります。
タイプ+$30
( p1=??, p2=??, p3=??, p4=rgbptr )
[ test( … , char *p4 ); ]
それぞれのタイプに+$30する(bit4,5を立てる)と、p4のパラメータがなくなり
かわりにp4はHSPのパレットrgbptrへのポインタが渡されます。
つまり、p1,p2,p3のパラメータまではそれぞれのタイプと同じで、p4だけが
rgbptrへのポインタ(char *)になります。
タイプ+$100それぞれのタイプに+$100する(bit8を立てる)と、その関数はクリーンアップ関数に 指定されます。 クリーンアップ関数は、HSPのプログラムが終了する時に自動的に実行されます。 これは、途中でHSPのプログラムを強制的に終了されたり、エラーで終了した時などに、 DLL側で確保したメモリやリソースが解放されなくなるのを防止するのに有効です。 DLL側でメモリやリソースを初期化しておいても、それを解放するための関数を、この クリーンアップ関数に指定しておけば、どんな時に終了しても解放ルーチンが呼び 出されることになります。 ただし、解放するルーチン側では、確保される前に呼ばれたり、2度呼び出されても いいようにチェックを行なっておいてください。
タイプ$202タイプに$202を指定すると、ver2.6以降専用の新しい呼び出し規約に基づいた 関数として指定されます。 タイプ$202は、パラメーターの解析をプラグインDLLの内部で行ないます。 これにより、パラメーターの組み合わせや数の制限なく値を取得することが可能になります。 ver2.6以降に対応したプラグインを作成される方は、なるべくこのタイプを使って 作成することを推奨致します。 また、HSPの今後のバージョンでもタイプ$202は、継続してサポートする予定です。
typedef struct HSPEXINFO
{
// HSP internal info data (2.6)
//
short ver; // Version Code
short min; // Minor Version
//
int *er; // Parameter Error Flag
char *pstr; // String Buffer (master)
char *stmp; // String Buffer (sub)
PVAL2 **pval; // Master PVAL ptr.
//
int *actscr; // Active Window ID
int *nptype; // Next Parameter Type
int *npval; // Next Parameter Value
int *strsize; // StrSize Buffer
char *refstr; // RefStr Buffer
//
int (*HspFunc_prm_getv)( void );
int (*HspFunc_prm_geti)( void );
int (*HspFunc_prm_getdi)( int defval );
char *(*HspFunc_prm_gets)( void );
char *(*HspFunc_prm_getds)( char *defstr );
int (*HspFunc_val_realloc)( PVAL2 *pv, int size, int mode );
int (*HspFunc_fread)( char *fname, void *readmem, int rlen, int seekofs );
int (*HspFunc_fsize)( char *fname );
void *(*HspFunc_getbmscr)( int wid );
int (*HspFunc_getobj)( int wid, int id, HSPOBJINFO *inf );
int (*HspFunc_setobj)( int wid, int id, HSPOBJINFO *inf );
//
} HSPEXINFO;
タイプ$202は、パラメーターの取得をユーザーの関数内で行ないます。
HSPSDK/SAMPLEディレクトリに、いくつかタイプ$202のサンプルがありますので、 そちらも参照してください。
以下は、整数値を3つ取得する例です。
EXPORT BOOL WINAPI test( HSPEXINFO *hei, int p1, int p2, int p3 )
{
// DLL test (type$202)
int ep1,ep2,ep3;
ep2 = hei->HspFunc_prm_getdi(0); // パラメータ1:数値
ep3 = hei->HspFunc_prm_getdi(0); // パラメータ2:数値
ep4 = hei->HspFunc_prm_getdi(0); // パラメータ3:数値
if ( *hei->er ) return *hei->er; // エラーチェック
return 0;
}
HspFunc_prm_getdi関数により、32bit整数値を取得することができます。
また、引数としてデフォルトの数値を指定することができます。
デフォルト数値を許さない場合は、HspFunc_prm_geti関数を使用してください。
HspFunc_prm_getdiの返り値が、実際のパラメーターとなります。
パラメーターは、何個でも連続して取得することができます。
必要なパラメーターを取得したら、最後にエラーチェックを行なう必要があります。
HSPEXINFOの「*er」メンバの内容が0ならば、パラメーター取得中にエラーは発生していません。
内容が0以外の場合は、それをそのままreturn値にして戻って下さい。エラーが報告されます。
エラーチェックを行なわないと、エラーが表示されなかったり、動作がおかしくなる可能性があるので、忘れずに入れるようにしてください。
EXPORT BOOL WINAPI test( HSPEXINFO *hei, int p1, int p2, int p3 )
{
// DLL test (type$202)
PVAL2 *pval;
char *ep1;
char *ep2;
ep1 = (char *)hei->HspFunc_prm_getv(); // パラメータ1:変数
pval = *hei->pval; // 変数のPVAL2ポインタを取得
ep2 = hei->HspFunc_prm_gets(); // パラメータ2:文字列
if ( *hei->er ) return *hei->er; // エラーチェック
return 0;
}
HspFunc_prm_getv関数は、変数のポインタを取得します。
HSPEXINFOの「*pval」メンバに取得した変数のPVALポインタが代入されます。
また、HspFunc_prm_getv関数自体の戻り値には、変数のデータそのもののポインタが入ります。
もし、配列変数を指定していた場合は、指定した配列のデータポインタが返ります。
たとえば、「a.2」という変数が指定されている場合は、PVALポインタは変数aそのもののPVAL情報になり、
HspFunc_prm_getv関数の返り値は、「a.2」のデータそのものが格納されているポインタとなります。
また、HspFunc_prm_gets関数は、文字列のパラメーターを取得します。
HspFunc_prm_gets関数の返り値は、文字列データへのポインタになります。
注意しなければならないのは、ここで返される文字列データへのポインタは、
HSP内部の一時的な文字列バッファであり、内容がずっと保持されるわけではありません。
たとえば、HspFunc_prm_gets関数の後に、もう一度HspFunc_prm_gets関数を
呼び出せば、前の文字列バッファの内容は新しい文字列で上書きされてしまいます。
このため、文字列データを2つ以上取得したい場合には、最初の文字列データをあらかじめコピーして保存しておく必要があります。
文字列は最大で64K(65536byte)まで渡される可能性があります。
また、文字列をコピーして保存しておくエリアとしてHSPEXINFOの「stmp」を
使用することができます。
ちなみに、デフォルトの文字列を設定できるHspFunc_prm_getds関数も同様の
動作を行ないます。
short ver; // Version CodeHSPのバージョンコードが入ります。2.6の場合は、0x0206となります。
short min; // Minor VersionHSPのマイナーバージョン番号が入ります。
int *er; // Parameter Error Flagエラーチェック用のフラグ値
char *pstr; // String Buffer (master)HspFunc_prm_gets、HspFunc_prm_getds関数で取得される文字列バッファ。(64K)
char *stmp; // String Buffer (sub)文字列バッファのコピー用に用意されたテンポラリメモリ(64K)。
PVAL2 **pval; // Master PVAL ptr.HspFunc_prm_getvで取得される変数のPVALポインタ。
int *actscr; // Active Window ID現在の操作先ウインドゥID。
int *nptype; // Next Parameter Type次のパラメーターのタイプを示す変数のポインタです。 *nptype値が、0の場合は記号、1は数値、2は文字列、3はラベル名、4は変数名を示しています。
int *npval; // Next Parameter Value次のパラメーターのタイプに対応した値を示す変数のポインタです。 *npval値は、タイプ(nptype)に対応した値が代入されます。
int *strsize; // StrSize Bufferシステム変数strsizeへのポインタが格納されます。
char *refstr; // RefStr Bufferシステム変数refstrへのポインタが格納されます。
int (*HspFunc_prm_getv)( void );パラメーター取得用関数。変数ポインタを取得する。 返値は、変数のデータポインタ。
int (*HspFunc_prm_geti)( void );パラメーター取得用関数。整数値を取得する。 返値は取得した値。
int (*HspFunc_prm_getdi)( int defval );パラメーター取得用関数。整数値を取得する。 defvalでデフォルトの値を設定する。 返値は取得した値。
char *(*HspFunc_prm_gets)( void );パラメーター取得用関数。文字列を取得する。 返値は取得した文字列ポインタ。
char *(*HspFunc_prm_getds)( char *defstr );パラメーター取得用関数。文字列を取得する。 defstrでデフォルトの文字列を設定する。 返値は取得した文字列ポインタ。
int (*HspFunc_val_realloc)( PVAL2 *pv, int size, int mode );pvで指定PVALポインタの変数バッファを、sizeで指定したメモリサイズに変更する。 modeが0の場合は、メモリ空間を0で初期化、modeが1の場合は内容は変更せずにバッファサイズのみ変更します。
int (*HspFunc_fread)( char *fname, void *readmem, int rlen, int seekofs );fnameで指定したファイル名の内容を、readmemポインタのメモリに読み込みます。 rlenで読み込むサイズ(バイト単位)、seekofsで読み込み開始オフセット(先頭から何バイト目か)を設定することができます。 PACKFILEに格納されているファイルや、暗号化されたファイルを取り出すことが可能です。 返値は実際に読み込まれたサイズとなります。ファイルがなかった場合は、マイナス値が返ります。
int (*HspFunc_fsize)( char *fname );fnameで指定したファイルのサイズを返します。 ファイルがなかった場合は、マイナス値が返ります。
void *(*HspFunc_getbmscr)( int wid );widで指定したウインドゥIDのBMSCR構造体ポインタを返値として取得します。
int (*HspFunc_getobj)( int wid, int id, HSPOBJINFO *inf );widで指定したウインドゥID内の、idで指定したオブジェクトIDの情報を HSPOBJINFO構造体に取得します。 正常に取得された場合は、0が返されます。
int (*HspFunc_setobj)( int wid, int id, HSPOBJINFO *inf );widで指定したウインドゥID内の、idで指定したオブジェクトIDの情報を HSPOBJINFO構造体から設定します。 正常に設定された場合は、0が返されます。
| 戻り値 | 行なわれる処理 |
| 0 | 正常終了 |
| -1以下 | システム変数statに戻り値を代入して終了 |
| 1〜255 | エラーを表示して停止 |
| 0x10000〜0x1ffff | 終了後awaitを実行 |
| 0x20000〜0x3ffff | 終了後waitを実行 |
呼び出しタイプ3,7 = PVAL構造体 ( ver2.4g以降で使用できるもの ) 呼び出しタイプ$83,$87 = PVAL2構造体 ( ver2.5以降で使用できるもの )HSP ver2.5より以前のバージョンで動作させるためには、PVAL構造体を 使用してください。ver2.5では、PVAL構造体、PVAL2構造体ともに使用する ことができますが、なるべく新しい形式(PVAL2構造体)に対応したものを 推奨します。
typedef struct PVAL2
{
// Memory Val structure (ver2.5 Type)
//
short flag; // type of val
short mode; // mode (0=normal/1=clone/2=alloced)
int len[5]; // length of array 4byte align (dim)
int size; // size of Val (not used)
char *pt; // (direct val) or (ptr to array)
} PVAL2;
typedef struct PVAL
{
// Memory Val structure (Old Type)
//
short flag; // type of val
short mode; // mode (0=normal/1=clone/2=alloced)
short len[5]; // length of array 4byte align (dim)
short version; // version check code (2.4 = 0)
char *pt; // (direct val) or (ptr to array)
PVAL2 *realptr; // real ptr to ver2.5 PVAL
} PVAL;
それぞれのメンバには、HSPが管理する変数についての情報が
格納されています。1つの変数名につき1つのPVAL構造体が存在します。
これには、変数の持つ属性や型などすべての情報が格納されています。
DLLでは、これらの値を自由に書き換えて使用することが可能です。
short flag; // type of val (2=str/4=num)変数の型が格納されています。
short mode; // mode (0=normal/1=clone/2=alloced)変数が作成されたモードが格納されています。
int len[5]; // length of array 4byte align (dim)配列のサイズについての情報が格納されています。
char *pt; // ptr to Val実際の変数の内容が記憶されているメモリへのポインタです。
int size; // size of Val (not used)変数が使用しているメモリサイズの合計です(未使用)。
short version; // version check code (2.4 = 0) PVAL2 *realptr; // real ptr to ver2.5 PVALバージョンチェックのためのフィールドです(PVAL構造体のみ)。
#define objkazz 64
typedef struct BMSCR
{
// Bitmap buffer structure
//
int flag; // used flag
int sx; // X-size
int sy; // Y-size
int palmode; // palmode
HDC hdc; // buffer HDC
BYTE *pBit; // bitmap pointer
BITMAPINFOHEADER *pbi; // infoheader
HBITMAP dib; // bitmap handle(DIB)
HBITMAP old; // bitmap handle(OLD)
RGBQUAD *pal; // palette table
HPALETTE hpal; // palette handle
HPALETTE holdpal; // palette handle (old)
int pals; // palette entries
HWND hwnd; // window handle
HANDLE hInst; // Instance of program
int infsize; // *pbi alloc memory size
int bmpsize; // *pBit alloc memory size
// Window object setting
//
int type; // setting type
int wid; // window ID
short fl_dispw; // display window flag
short fl_udraw; // update draw window
int wx,wy,wchg; // actual window size x,y
int xx,yy; // buffer view point x,y
int lx,ly; // buffer view size x,y
int cx,cy; // object cursor x,y
int ox,oy,py; // object size x,y,py
int texty; // text Y-axis size
int gx,gy,gmode; // gcopy size
HBRUSH hbr; // BRUSH handle
HPEN hpn; // PEN handle
HFONT hfont; // FONT handle
HFONT holdfon; // FONT handle (old)
COLORREF color; // text color code
HANDLE hCld[objkazz]; // buttonのhandle
int owid[objkazz]; // buttonのjump ID
int owb; // handleのindex
int textspeed; // slow text speed
int cx2,cy2; // slow text cursor x,y
int tex,tey; // slow text limit x,y
char *prtmes; // slow message ptr
// Enhanced in ver2.4
//
int focflg; // focus set flag
// Enhanced in ver2.5
//
int objmode; // object set mode
LOGFONT logfont; // logical font
// Enhanced in ver2.6
//
int style; // extra window style
int gfrate; // halftone copy rate
int tabmove; // object TAB move mode
int sx2; // actual bitmap X size
SIZE printsize; // print,mes extent size
char *owpval[objkazz]; // objectのPVAL Ptr.
char owts[objkazz]; // objectのTAB stop flag
} BMSCR;
それぞれのメンバには、HSPが管理するウインドゥ画面についての情報が
格納されています。DLLに、BMSCR構造体へのポインタが渡される場合は、
現在の操作先画面(gsel命令で指定したウインドゥID)の情報が渡されます。
int flag; // used flagBMSCRが管理する画面が使用されているかどうかのフラグです。
int sx; // X-size int sy; // Y-size int palmode; // palmode画面を初期化したサイズが格納されています。
HDC hdc; // buffer HDC画面のデバイスコンテキストが格納されています。
BYTE *pBit; // bitmap pointer画面のビットマップデータが格納されているメモリの先頭アドレスです。 このポインタを使って直接、画面にデータを書き込むことが可能です。
BITMAPINFOHEADER *pbi; // infoheader HBITMAP dib; // bitmap handle(DIB) HBITMAP old; // bitmap handle(OLD)画面データを管理するビットマップについての情報です。
RGBQUAD *pal; // palette table HPALETTE hpal; // palette handle HPALETTE holdpal; // palette handle (old) int pals; // palette entries画面に適用されているパレットの情報です。
HWND hwnd; // window handle画面の描画先にあたるウインドゥのハンドルです。
HANDLE hInst; // Instance of programウインドゥを管理するプログラムためのインスタンスです。
int infsize; // *pbi alloc memory size int bmpsize; // *pBit alloc memory size画面データ初期化時のメモリ使用量を示すワークです。
int type; // setting type画面の属性を示します。
type : 1=off screen buffer 2=background image (full size) 3=hsp main window (fixed size) 4=normal window (fixed size) 5=picture window (flex size) 6=special window (stretch) 7=screen saver preview window
int wid; // window IDウインドゥIDを示します。
short fl_dispw; // display window flag short fl_udraw; // update draw window画面がウインドゥとして表示されているかどうか、 画面の更新が必要かどうかを示すフラグです。
int wx,wy,wchg; // actual window size x,y int xx,yy; // buffer view point x,y int lx,ly; // buffer view size x,yスクロールバーによってスクロールが可能なウインドゥでの、 表示ウインドゥサイズ、画面内から転送する元座標、転送する範囲 などを示します。
int cx,cy; // object cursor x,yカレントポジションを示します。
int ox,oy,py; // object size x,y,pyobjsize命令で指定したオブジェクトの大きさを示します。
int texty; // text Y-axis size現在選択されている文字フォントのY方向のサイズを示します。
int gx,gy,gmode; // gcopy sizegmode命令で指定した画面コピー時のサイズとモードを示します。
HBRUSH hbr; // BRUSH handle HPEN hpn; // PEN handlecolor命令で指定した色によるブラシとペンを示すオブジェクトの ハンドルです。
HFONT hfont; // FONT handle HFONT holdfon; // FONT handle (old)font命令で指定したフォントのオブジェクトハンドルです。
COLORREF color; // text color codecolor命令で指定した色データを示します。
HANDLE hCld[objkazz]; // buttonのhandle int owid[objkazz]; // buttonのjump ID int owb; // handleのindex画面上に配置するHSPのオブジェクト(ボタンや入力ボックスなど) に関する情報が格納されています。hCld[n]はオブジェクトハンドル、 owid[n]は各種情報を示しています。(nはオブジェクトID)
int textspeed; // slow text speedtext命令で指定したテキストの表示スピードを示します。
int cx2,cy2; // slow text cursor x,y int tex,tey; // slow text limit x,y char *prtmes; // slow message ptrゆっくりと文字列を表示するためのワークです。
// Enhanced in ver2.4 // int focflg; // focus set flagver2.4h以降に拡張されたフィールドです。 focflgは、初期フォーカスを合わせるための一時フラグに使用されます。 この値は、内部で使用するだけなので変更しないで下さい。
// Enhanced in ver2.5 // int objmode; // object set mode LOGFONT logfont; // logical fontver2.5以降に拡張されたフィールドです。 objmodeは、objmode命令で設定されているモードが格納されます。 logfontは選択された論理フォント構造体が格納されます。
// Enhanced in ver2.6 // int style; // extra window style int gfrate; // halftone copy rate int tabmove; // object TAB move mode int sx2; // actual bitmap X size SIZE printsize; // print,mes extent size char *owpval[objkazz]; // objectのPVAL Ptr. char owts[objkazz]; // objectのTAB stop flagver2.6以降に拡張されたフィールドです。 styleは、ウインドゥ固有のスタイル(screen命令で設定)が格納されます。
(パレットモード(256色)時) x = X座標; y = Y座標; width = (sx+3)&~3; vram_adr = pBit + ( ( sy - 1 - y ) * width ) + x; (フルカラーモード(1670万色)時) x = X座標; y = Y座標; width = ((sx*3)+3)&~3; vram_adr = pBit + ( ( sy - 1 - y ) * width ) + ( x * 3 );
[一番上に戻る]