メニューのチェックマークをビットマップで          <TOP>


メニューのチェックマークを、作成したBitmapに変更してみます。

LoadImage 画像ファイルの読み込み

GetMenu メニューのハンドルを取得

GetSubMenu ポップアップメニューのハンドルを取得

SetMenuItemBitmaps メニューのチェックマークをビットマップに変更

 

 

'================================================================
'= メニューのチェックマークをビットマップで
'=    (SetMenuItemBitmaps.bas)
'================================================================
#include "Windows.bi"

#define MF_BYPOSITION &H400             'nPositionはメニュー項目のインデックス
#define IMAGE_BITMAP 0                  'ビットマップ
#define LR_LOADFROMFILE &H10            '外部ファイルからロードする

' 画像ファイルの読み込み
Declare Function Api_LoadImage& Lib "user32" Alias "LoadImageA" (ByVal hInst&, ByVal lpszName$, ByVal uType&, ByVal cxDesired&, ByVal cyDesired&, ByVal fuLoad&)

' メニューのハンドルを取得
Declare Function Api_GetMenu& Lib "user32" Alias "GetMenu" (ByVal hWnd&)

' ポップアップメニューのハンドルを取得
Declare Function Api_GetSubMenu& Lib "user32" Alias "GetSubMenu" (ByVal hMenu&, ByVal nPos&)

' メニューのチェックマークをビットマップに変更
Declare Function Api_SetMenuItemBitmaps& Lib "user32" Alias "SetMenuItemBitmaps" (ByVal hMenu&, ByVal nPosition&, ByVal wFlags&, ByVal hBitmapUnchecked&, ByVal hBitmapChecked&)

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var hMenu As Long
    Var hSubMenu As Long
    Var hBmp(5) As Long
    Var Ret As Long

    'メニューのハンドルを取得
    hMenu = Api_GetMenu(GethWnd)

    'メニューをチェック
    If hMenu = 0 Then
        A% = MessageBox(GetWindowText, "このフォームに「Menu」はありません!", 0, 2)
        Exit Sub
    End If

    'サブメニューのハンドルを取得
    hSubMenu = Api_GetSubMenu(hMenu, 0)

    'サブメニューをチェック
    If hSubMenu = 0 Then
        A% = MessageBox(GetWindowText, "このフォームに「SubMenu」はありません!", 0, 2)
        Exit Sub
    End If

    For i% = 0 To 5
        'Bitmapの読み込み
        hBmp(i%) = Api_LoadImage(0, "Menu" & Trim$(Str$(i%)) & ".bmp", IMAGE_BITMAP, 8, 8, LR_LOADFROMFILE)

        'メニューにビットマップを設定
        Ret = Api_SetMenuItemBitmaps(hSubMenu, i%, MF_BYPOSITION, hBmp(i%), hBmp(i%))
    Next
End Sub

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