ホーム > カテゴリ > Visual Basic >

メニューのチェックマークをBMPに変更する

メニューのチェックマークをBMPに変更するサンプルです。

サンプルの実行画面

APIの宣言

[CheckBMP.bas]

'----------------------------------
'メニューのハンドルを取得するAPI関数
'---------------------------------
  
  'hWnd:ウインドウのハンドル
  
  '戻り値:メニューのハンドル

Public Declare Function GetMenu Lib "USER32" (ByVal hWnd As Long) As Long

'----------------------------------------------------
'トップレベル(サブ)メニューのハンドルを取得するAPI関数
'----------------------------------------------------
 
 'hMenu:メニューのハンドル
 'nPos:メニュー項目の位置
 '戻り値:トップレベルメニューのハンドル

Public Declare Function GetSubMenu Lib "USER32" (ByVal hMenu As Long, ByVal nPos As Long) As Long

'----------------------------------------------------
'メニューのチェックマークをビットマップに変更するAPI関数
'----------------------------------------------------

  'hMenu:メニューのハンドル
  'nPosition:wFlagsで指定した値
  'wFlags:定数(MF_××参照)
  'hBitmapUnchecked:チェックしていない時のBMPのハンドル(0にすれば何も表示されない)
  'hBitmapCheckeチェックしている時のBMPのハンドル
  
  '戻り値:正常終了0以外

Public Declare Function SetMenuItemBitmaps Lib "USER32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long

Public Const MF_BYPOSITION = &H400    'メニューの項目番号(0~)
Public Const MF_BYCOMMAND = &H0       'メニューのID

'------------------------------------------------
'■関数名  CheckBMP
'■用途    メニューのチェックマークをBMPに変更する
'■引数
'   nhWmd    親ウインドウのハンドル
'   Position  メニューの項目番号(0~)
'   UnCheck   チェックしていない時のBMPのハンドル
'    Check     チェックしている時のBMPのハンドル
'------------------------------------------------

Public Sub CheckBMP(nhWmd As Long, Position As Long, UnCheck As Long, Check As Long)

 Dim hMen As Long        'メニューのハンドル
 Dim SubMen As Long      'サブメニューのハンドル
 Dim Ret As Long         '戻り値

'メニューのハンドルを取得
 hMen = GetMenu(nhWmd)
'サブメニューのハンドルを取得
 SubMen = GetSubMenu(hMen, 0)
'メニューのチェックマークをビットマップに変更する。
 Ret = SetMenuItemBitmaps(SubMen, Position, MF_BYPOSITION, UnCheck, Check)

End Sub

APIの呼び出し

[CheckBMP.frm]

'メニューの「コピー」の処理
Private Sub Copy_Click()

If Copy.Checked = True Then
   Copy.Checked = False
Else
  Copy.Checked = True
  Call CheckBMP(Form1.hWnd, 1, 0, Picture2.Picture)
End If

End Sub

'メニューの「切り取り」の処理
Private Sub Cut_Click()

If Cut.Checked = True Then
   Cut.Checked = False
Else
  Cut.Checked = True
  Call CheckBMP(Form1.hWnd, 0, 0, Picture1.Picture)
End If

End Sub


'メニューの「削除」の処理
Private Sub Delete_Click()

If Delete.Checked = True Then
   Delete.Checked = False
Else
  Delete.Checked = True
  Call CheckBMP(Form1.hWnd, 3, 0, Picture4.Picture)
End If

End Sub

'メニューの「貼り付け」の処理
Private Sub Draw_Click()

If Draw.Checked = True Then
   Draw.Checked = False
Else
  Draw.Checked = True
  Call CheckBMP(Form1.hWnd, 2, 0, Picture3.Picture)
End If

End Sub

Private Sub Form_Load()


Picture1.Picture = LoadPicture(App.Path & "\Cut.bmp")
Picture2.Picture = LoadPicture(App.Path & "\Copy.bmp")
Picture3.Picture = LoadPicture(App.Path & "\Paste.bmp")
Picture4.Picture = LoadPicture(App.Path & "\Spelling.bmp")

End Sub

ソースコード一式のダウンロード

vbapi_checkbmp.zip 3.28 KB (3,366 バイト)

このサンプルの動作環境について

このサンプルは 「Windows98」及び「Microsoft Visual Basic 5.0 Professional Edition」で確認しております。環境が異なる場合は正常に動作しない場合もございますのでご了承下さい。





関連記事



公開日:2015年03月04日
記事NO:00360