getch()
を用いる
#include <GC2Szkey.c>で、TLL をインクルードするには
#include <GC2Szkey.h>で使用してください。
BOOL GC2Szkey(TXCHAR chGC, mchar *szKey)
szKey
に格納します。
TXCHAR chGC
mchar *szKey
BOOL GetCMD(CMDstruct *InputCMD,GetCMDOption *Option)
CMDstruct *InputCMD
GetCMDOption *Option
BOOL
CMDstruct
typedef struct { mchar szKey[20]; //入力したキーを表す文字列 TXCHAR chInput; //入力した文字のコード WZCMD cmd; //入力したキーにバインドされているコマンドId mchar szcmd[50]; //入力したキーにバインドされているコマンド名 BOOL fSHIFT; //同時に SHIFT が押されていたか(絶対状態取得) BOOL fCTRL; //同時に CTRL が押されていたか(絶対状態取得) BOOL fALT; //同時に ALT が押されていたか(絶対状態取得) } CMDstruct;
szKey
| getch() で入力されたキーを受け取り、それを GC2Szkey に渡して得られる文字列を格納します。 |
chInput
| 文字を生成するキーではその文字の ASCII コード、文字を生成しないキーに対しては Windows の仮想キーコードが格納されます。 |
cmd
| 入力されたキーに割り当てられているコマンドの「コマンドId」を返します。コマンドを割り当てられないキーに対しては 0 を返します。 |
szcmd
| 入力されたキーに割り当てられているコマンドの「コマンド名」を返します。コマンドを割り当てられないキーに対しては "null"(という文字列)を返します。 |
fSHIFT
| キーが入力されたときに同時に SHIFT が押されていたかを示します。SHIFTキーが押されていれば true,さもなくば false を返します。GC_WITHSHIFT と違い、絶対状態を取得するので、[SHIFT]+[英字] で文字を入力した場合にも true が返されます。 |
fCTRL
| キーが入力されたときに同時に CTRL が押されていたかを示します。CTRLキーが押されていれば true,さもなくば false を返します。絶対状態を取得します。 |
fALT
| キーが入力されたときに同時に ALT が押されていたかを示します。ALTキーが押されていれば true,さもなくば false を返します。絶対状態を取得します。 |
GetCMDOption
typedef struct { mchar szWaitmessage[80]; //入力待ちメッセージ BBOOL fESC; //ESC設定 (動作変更) BBOOL fNormalizeKeyUpDown; //(オプション廃止)常に RAWKeyUpDown を指定 BBOOL fGetNullCmd; //null cmd の受け付け } GetCMDOption;
szWaitmessage
| キー入力待ちの時にステータスラインに表示するメッセージを入れます。NULL文字列を入れるとステータスラインを書き換えません。 |
fESC
| [ESC] を 2ストロークキーとしている場合に 2ストロークキーとして扱うか[ESC]キーの入力として扱うかを指定します。[ESC]キーに2ストロークキーが割り当てられていないときは動作に違いはありません。
fESC の値は次のいずれかです。
ESCESC を指定したときに [ESC]キーを押すと常に InputCMD->cmd に 0, InputCMD->szcmd には "NULL" が返されていましたが、ver1.00 から[ESC]キーに割り当てられているコマンドID とコマンド名を返すように変更しました。2ストロークキーのときにはコマンド名「2ストロークキー」が返されます。
|
fNormalizeKeyUpDown
| 常に RAWKeyUpDown を指定します。
|
fGetNullCmd
| コマンドが割り当てられていないキーの入力があったとき、その入力を受け付けるか次の入力を待つかを指定します。
fGetNullCmd の値は次のいずれかです。
|
TX *text
TXCHAR ch
int
wzcmdFromSzkey
wzcmdFromSzkey(s) (wzkeyGetWzcmd(wzkeyFromSzkey(s)))
Is2strokeSzcmd
Is2strokeSzcmd(s) ((strcmp(s,"2ストロークキー") == 0))
DelayedGC_WITHSHIFT
DelayedGC_WITHSHIFT (GetKeyState(VK_SHIFT) < 0)
GC_GETByte
#define GC_GETByte(c) ((c) & 0xFF)
KeyUpDown2NormalUpDown
の廃止及びそれに伴う GetCMD
に於ける Option->fNormalizeKeyUpDown
オプションの廃止(常に RAWKeyUpDown を指定)。さらに GetCMD
内部で wndtxCall(text->hwndbase,szCmd)
を使用していた部分を Call(szCmd) で処理するように変更
GetCMD
に於ける Option->fESC
の、ESCESC
指定時の返り値の変更
nrtkeyWriteChar
の追加
GetCMD
の追加
getch()
」でしたが、取得した文字をキーをあらわす文字列に変換する必要がありました。それが「GC2Szkey」の意味です。そのキーをあらわす文字列を「wzcmdFromSzkey」を用いてさらに「wzcmdToSzcmd」を用いてそのキーに割り当てられているコマンドを知ることができ、それを wndtxCall で実行しました。(GC2Szkey ver1.00 からは txCall を用いることを想定するようになりました。)
その後も僕は幾つか常駐型のマクロやキーを取得して解釈して動作するマクロを幾つか作りましたが、その過程で、「GC2Szkey.txc」を強化してこのモジュールにその関数を実行するとキーを受け付けてそのキーが押されたときのシフトキーの状態やコマンドなどの情報を含んだ構造体に値を格納する getch() の Wrapper関数「GetCMD」を作りました。
TeXenv では使っていませんが、その他の「GC2Szkey.c」を使っている僕のマクロは「GetCMD」を用いています。