カーソルのコピーを作成する
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