高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

OPS 13 - カーソルが隠されているかどうかを判断する

(27-September-96)

Q: マウスカーソルが隠されているかどうかを判断するには、どの様にすればよいのでしょうか?

A: 現時点で最良の方法は、LowMem.hには含まれていないローメモリ・グローバル変数を使用することです。それらのローメモリ・グローバルが含まれていない理由は、将来のOSはマウスカーソルを異なる方法で扱う可能性があるからです。

ローメモリ・グローバルの使用は本来であれば勧められることではなかったのですが、古いインタフェースファイルでは記述されていました。ユニバーサルインタフェースは、将来のオペレーティングシステムに向けて設計されたものです。ローメモリ・グローバルの中には、安全に使用するためにアクセス用関数によりアクセスするよう変更されたものがあり、それら以外は削除されました。そのため、アクセス用関数が用意されていないローメモリ・グローバルは、今後変更される可能性があり、安全に使用することができないということもありうるのです。

以下の定義は、古いインタフェースファイルから抜き出したものです。

enum {
    CrsrRect = 0x83C,   /*[グローバル変数]  
    			カーソルがヒットしているレクト [8 bytes]*/
    			
    TheCrsr  = 0x844,   /*[グローバル変数]  
    			カーソルのデータ、マスクおよびホットスポット [68 bytes]*/
    			
    CrsrAddr = 0x888,   /*[グローバル変数]  
    			カーソルに隠されている部分のデータのアドレス [long]*/
    			
    CrsrSave = 0x88C,   /*[グローバル変数]  
    			カーソルに隠されている部分のデータ [64 bytes]*/
    			
    CrsrVis  = 0x8CC,   /*[グローバル変数]  
    			カーソルが表示されているか? [byte]*/
    			
    CrsrBusy = 0x8CD,   /*[グローバル変数]  
    			カーソルがロックされているか? [byte]*/
    			
    CrsrNew  = 0x8CE,   /*[グローバル変数]  
    			カーソルが変更されているか? [byte]*/
    			
    CrsrState = 0x8D0,  /*[グローバル変数]  
    			カーソルのネストレベル [word]*/
    			
    CrsrObscure = 0x8D2 /*[グローバル変数]  
    			カーソルが覆い隠されている(obscure)かどうかを示すセマフォ [byte]*/
  };

以上の通り、CrsrVisはカーソルが隠されているかどうかを示すフラグになっています。

以下のルーチンは、カーソルの状態を確認するためにこのフラグを使用しています。

int IsCursorHidden()
{
    int retVal = 0;
    unsigned char cursorVisible;

    cursorVisible = *(unsigned char*)CrsrVis;
    if (cursorVisible)
        retVal = 0;
    else
        retVal = 1;
    return (retVal);
}


[ Technical Q&A's : Operating System Services : OS Utilities : OPS11 ]