C言語でグラフィックス 目次へ 
 前へ 【3】グラフィックス・ウィンドウでの入力 次へ 

キーボードの状態(GWkybrd関数)

◆サンプルプログラム 〔gr313.c〕
 キーボードの状態を調べる関数(GWkybrd)を使って文字入力される値を確認する。

#include <GrWin.h>
#include <stdio.h>

int main(void)
{
    int     width = 640, height = 400;
    int     moji, ch, cnt, flag;

    GWopen(0);
    GWsize(-5, &width, &height);
    GWsize(-3, NULL, NULL);
    GWvport(0.0, 0.0, (float)width / (float)height, 1.0);
    GWindow(0.0, 0.0, (float)width - 1.0, (float)height - 1.0);
    /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
    GWclear(-1);
    do{
        moji = GWkybrd(&ch, &cnt, &flag, 2);      /* キーが押されるまで待つ */
        printf("%X(%X %X %X) ",moji, ch, cnt, flag);    /* 確認用 */
    }while(moji != 'Q');    /* Qが押されたら終了 */
    /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
    GWquit();
    return 0;
}
int GWkybrd(int *文字コード, int *回数, int *フラグ, int 動作);
キーボードの情報を取得する。
・文字コードは、押された文字コードが設定(格納)される。
・回数は、キーを押し続けたときの回数が設定(格納)される。
・フラグは、2バイトで各ビットの意味は次の通りである。
0-7 スキャンコード (OEM 依存の値)
  8 ファンクションキーや数字キーパッド上のキーなど、拡張キーの場合は1。
11-12 Windows 内部で使用。
 13 Altキーを押した状態でほかのキーを押した場合は1、それ以外は0。
 14 直前にキーが押されていた場合は1、離されていた場合は0。
 15 変換状態 (キーを離している場合は1、押されている場合は0)。
・動作は、次の値を指定する。
0  キーボード情報を取得して直ちに制御を戻す。
1  非システムキーが押され、ASCIIコードへの変換が終了するまで待つ。
2  どれかキーが押されるまで待つ。
3  どれかキーが放されるまで待つ。
その他 キーが押されているときはそのキーが放されるまで待ち、呼び出されたときのキーボード情報返す。キーが押されていなかったときは直ちに制御を戻す。

 実行するとき、コマンドプロンプトとGWウィンドウを下図のように重ねておくと、押したキーのデータが表示されるのが見える。
 「Q」のキーを押すとプログラムは終了する。

 文字コードはコマンドプロンプトに表示される。
 a,b,c,1,2,3,[Esc],[↑],[↓],[←],[→],q の順に押したときの結果である。

C:\work>gr313
41(61 1 1E) 42(62 1 30) 43(63 1 2E) 31(31 1 2) 32(32 1 3) 33(33 1 4) 1B(1B 1 1)
26(1B 1 148) 28(1B 1 150) 25(1B 1 14B) 27(1B 1 14D) 51(71 1 10)
C:\work>
(参考)   a=0x61, b=0x62, c=0x63, q=0x71, 1=0x31, 2=0x32, 3=0x33
文字コード A=0x41, B=0x42, C=0x43, Q=0x51, [Esc]=0x1B

 aを押したとき、コマンドプロンプトの表示 → 41(61 1 1E)
   関数の返却値 41 大文字小文字の別なく、Aの文字コードが返却される。
   文字コード   61 押したキーの文字コードが設定される。
   回数        1  押した回数が設定される。

 サンプルプログラムでは文字コードや設定されるデータを確認するため、GWkeybrd関数の動作に2を設定して、キーが押されるまで待つようにしている。


 前へ 次へ 
 Copyright © 2005 Hiroshi Masuda 

 

 

inserted by FC2 system