カーソルを作成          <TOP>


新しいカーソルを作成します。

CreateCursor 指定されたサイズ、 ビットパターン及びホットスポットを持つマウスカーソルの作成

DestroyCursor カーソルを破棄する

SetCursor マウスカーソルの形状を設定

Sleep カレントスレッドの実行を指定の時間だけ中断

 

ホットスポットを32×32の中心とした十字のカーソルを作成し、10秒後にデフォルトカーソルに戻しています。

'================================================================
'= カーソルを作成
'=    (CreateCursor.bas)
'================================================================
#include "Windows.bi"

' 指定されたサイズ、 ビットパターン及びホットスポットを持つマウスカーソルの作成
Declare Function Api_CreateCursor& Lib "user32" Alias "CreateCursor" (ByVal hInstance&, ByVal nXhotspot&, ByVal nYhotspot&, ByVal nWidth&, ByVal nHeight&, lpANDbitPlane As Any, lpXORbitPlane As Any)

' カーソルを破棄する
Declare Function Api_DestroyCursor& Lib "user32" Alias "DestroyCursor" (ByVal hCursor&)

' マウスカーソルの形状を設定
Declare Function Api_SetCursor& Lib "user32" Alias "SetCursor" (ByVal hCursor&)

' カレントスレッドの実行を指定の時間だけ中断
Declare Sub Api_Sleep Lib "Kernel32" Alias "Sleep" (ByVal dwMilliseconds&)

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var hNewCursor As Long        '新たなカーソル
    Var hOldCursor As Long        'デフォルトカーソル
    Var andBuffer As String       'カーソルをドットで描画
    Var xorBuffer As String       'マスク
    Var andBits(127) As Byte      'ビット(and)
    Var xorBits(127) As Byte      'ビット(xor)
    Var readData As String        '読込データ
    Var c As Integer
    Var Ret As Long

    'データ読み込み
    For c = 0 To 7
        Read readData
        andBuffer = andBuffer & readData
    Next
    For c = 0 To 7
        Read readData
        xorBuffer = xorBuffer & readData
    Next

    '配列に代入
    For c = 0 To 127
        andBits(c) = Val("&H" & Mid$(andBuffer, 2 * c + 1, 2))
        xorBits(c) = Val("&H" & Mid$(xorBuffer, 2 * c + 1, 2))
    Next c

    'hotspotを中心とした十字のカーソルを作成
    hNewCursor = Api_CreateCursor(GethInst, 16, 16, 32, 32, andBits(0), xorBits(0))

    '新たなカーソルに変更
    hOldCursor = Api_SetCursor(hNewCursor)  'カーソル変更

    Api_Sleep 10000                            '10秒待つ

    Ret = Api_SetCursor(hOldCursor)            'デフォルトカーソルに変更

    Ret = Api_DestroyCursor(hNewCursor)        'カーソルを破棄

    data "FFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFF"
    data "FFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFF"
    data "FFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFF"
    data "FFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFF"
    data "00000000FFFF7FFFFFFF7FFFFFFF7FFF"
    data "FFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFF"
    data "FFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFF"
    data "FFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFF"

    data "00000000000000000000000000000000"
    data "00000000000000000000000000000000"
    data "00000000000000000000000000000000"
    data "00000000000000000000000000000000"
    data "00000000000000000000000000000000"
    data "00000000000000000000000000000000"
    data "00000000000000000000000000000000"
    data "00000000000000000000000000000000"
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End