CopyCursor

機能
カーソルのコピーを作成する
Declare Function CopyCursor Lib "user32.dll" Alias "CopyIcon" _
(ByVal pcur As Long)As Long
Declare Function CopyCursor Lib "user32.dll" Alias "CopyIcon" _
(ByVal pcur As Integer)As Integer

HCURSOR CopyCursor(
HCURSOR pcur
);
引数
pcur

コピーするカーソルのハンドル
アイコンのハンドルを指定すると、アイコンからカーソルが作れる
戻り値
正常終了のとき                     新しいカーソルのハンドル
エラーのとき                       0
備考
コピーしたカーソルのハンドルはDestroyCursor()関数で破棄する
サンプル
ダウンロード(CopyCursor.lzh 2.95KB)

'カーソルのコピーを作成する
Private Declare Function CopyCursor Lib "user32.dll" Alias "CopyIcon" _
    (ByVal pcur As Long) As Long
'実行モジュール中のリソースからアイコン・カーソル・ビットマップをロードする
Private Declare Function LoadImageStr Lib "user32.dll" Alias "LoadImageA" _
        (ByVal hinst As Long, ByVal lpszName As String, ByVal uType As Long, _
        ByVal cxDesired As Long, ByVal cyDesired As Long, ByVal fuLoad As Long) As Long
'lpszNameの定数
        'OEMビットマップ
        Private Const OBM_CLOSE = 32754
        Private Const OBM_UPARROW = 32753
        Private Const OBM_DNARROW = 32752
        Private Const OBM_RGARROW = 32751
        Private Const OBM_LFARROW = 32750
        Private Const OBM_REDUCE = 32749
        Private Const OBM_ZOOM = 32748
        Private Const OBM_RESTORE = 32747
        Private Const OBM_REDUCED = 32476
        Private Const OBM_ZOOMD = 32745
        Private Const OBM_RESTORED = 32744
        Private Const OBM_UPARROWD = 32743
        Private Const OBM_DNARROWD = 32742
        Private Const OBM_RGARROWD = 32741
        Private Const OBM_LFARROWD = 32740
        Private Const OBM_MNARROW = 32739
        Private Const OBM_COMBO = 32738
        Private Const OBM_UPARROWI = 32737
        Private Const OBM_DNARROWI = 32736
        Private Const OBM_RGARROWI = 32735
        Private Const OBM_LFARROWI = 32734
        Private Const OBM_OLD_CLOSE = 32736
        Private Const OBM_SIZE = 32766
        Private Const OBM_OLD_UPARROW = 32765
        Private Const OBM_OLD_DNARROW = 32764
        Private Const OBM_OLD_RGARROW = 32763
        Private Const OBM_OLD_LFARROW = 32762
        Private Const OBM_BTSIZE = 32761
        Private Const OBM_CHECK = 32760
        Private Const OBM_CHECKBOXES = 32759
        Private Const OBM_BTNCORNERS = 32758
        Private Const OBM_OLD_REDUCE = 32757
        Private Const OBM_OLD_ZOOM = 32756
        Private Const OBM_OLD_RESTORE = 32755
         'OEMアイコン
        Private Const OIC_SAMPLE = 32512
        Private Const OIC_HAND = 32513
        Private Const OIC_QUES = 32514
        Private Const OIC_BANG = 32515
        Private Const OIC_NOTE = 32516
        Private Const OIC_WINLOGO = 32517
        Private Const OIC_WARNING = OIC_BANG
        Private Const OIC_ERROR = OIC_HAND
        Private Const OIC_INFORMATION = OIC_NOTE
         'OEMカーソル
        Private Const OCR_NORMAL = 32512    '標準の矢印形状
        Private Const OCR_IBEAM = 32513     'Iビーム
        Private Const OCR_WAIT = 32514      '砂時計
        Private Const OCR_CROSS = 32515     '細いクロスヘア形状
        Private Const OCR_UP = 32516        '上向き矢印形状
        Private Const OCR_SIZE = 32640      'OCR_SIZEALLを使う
        Private Const OCR_ICON = 32641      'OCR_NORMALを使う
        Private Const OCR_SIZENWSE = 32642  '両矢印形状(北西ー南東)
        Private Const OCR_SIZENESW = 32643  '同上(北東ー南西)
        Private Const OCR_SIZEWE = 32644    '同上(左右)
        Private Const OCR_SIZENS = 32645    '同上(上下)
        Private Const OCR_SIZEALL = 32646   'サイズ変更(上下左右)
        Private Const OCR_ICONCUR = 32647   'OIC_WINLOGOを使う
        Private Const OCR_NO = 32648        '指定領域外
        Private Const OCR_HAND = 32649      '(WindowsNT)
        Private Const OCR_APPSTARTING = 32650
                                            'アプリケーションの起動時
                                            '(矢印と砂時計)
'uTypeの定数
Private Const IMAGE_BITMAP = 0               'ビットマップ
Private Const IMAGE_ICON = 1                 'アイコン
Private Const IMAGE_CURSOR = 2               'カーソル
'fuLoadの定数
Private Const LR_DEFAULTCOLOR = &H0          'デフォルトのカラーを使う
Private Const LR_CREATEDIBSECTION = &H2000   'uType=IMAGE_BITMAPのとき
                                             'DIBSectionビットマップを返す
Private Const LR_DEFAULTSIZE = &H40          'アイコン・カーソルのときは
                                             'cxDesiredまたはcyDesired=0のとき
                                             'システムのサイズを使う。
                                             'このフラッグを設定しないで
                                             'cxDesiredまたはcyDesired=0のとき
                                             'リソースのままのサイズを使う。
                                             'リソースが複数の場合は
                                             '最初のものを使う。
Private Const LR_LOADFROMFILE = &H10         'lpszNameはイメージファイル名である。
Private Const LR_LOADMAP3DCOLOR = &H1000     'イメージのカラーテーブルをないを検索し
                                             '下記の灰色を指定の色と置き換える。
                                             '--------------------------------------
                                             '暗灰色(&H808080)⇒COLOR_3DSHADOW
                                             '灰色(&HC0C0C0)  ⇒COLOR_3DFACE
                                             '明灰色(&HDFDFDF)⇒COLOR_3DLIGHT
                                             '--------------------------------------
Private Const LR_LOADTRANSPARENT = &H20      'イメージの最初のピクセルの
                                             'カラー値を取得しそのカラー値と同じ
                                             'ピクセルを全てCOLOR_WINDOWに置き換える
Private Const LR_MONOCHROME = &H1            'イメージを白と黒のモノクロカラーで読み込む
Private Const LR_SHARD = &H8000&             '同じリソースをロードしたときハンドルを共有する
                                             'ロード後にサイズを変更する可能性のあるときは
                                             'このフラッグを設定しない。
                                             'イメージをファイルから読み込むときは
                                             'このフラッグを設定しない。
                                             'OEMイメージを使用する場合はこのフラッグを
                                             '設定しなければならない。
Private Const LR_VGACOLOR = &H80             'VGAカラー(標準16色)を使う
 

'マウスカーソルを設定する
Private Declare Function SetCursor Lib "user32.dll" _
    (ByVal hCursor As Long) As Long
'カーソルを破棄する
Private Declare Function DestroyCursor Lib "user32.dll" _
    (ByVal hCursor As Long) As Long
'アイコンのハンドルを破棄する
Private Declare Function DestroyIcon Lib "user32.dll" _
        (ByVal hIcon As Long) As Long

Dim hCursor As Long, hOldCursor As Long

Private Sub Form_Load() Dim hIcon As Long 'アイコンファイルからカーソルを作る hIcon = LoadImageStr(App.hInstance, "icon.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE) hCursor = CopyCursor(hIcon) hOldCursor = SetCursor(hCursor) Call DestroyIcon(hIcon) End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'マウスカーソルを設定する '(VBのコントロール上ではマウスが動くたびにマウスを標準に戻そうとするため) Call SetCursor(hCursor) End Sub
Private Sub Form_Unload(Cancel As Integer) Call SetCursor(hOldCursor) Call DestroyCursor(hCursor) End Sub