● コマンドボタンに画像を挿入する ●

VB4.0でもバッチリ実装できる。というかVB4.0用。VB5.0 以降ではこのロジックの必要性はまったくない。

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const BM_SETIMAGE As Long = &HF7&
Private Const BS_BITMAP As Long = &H80&
Private Const GWL_STYLE As Long = (-16)

'---------------------------------------------------------------------------
'  関数名: SetPictureToCmdBtn
'  機  能: コマンドボタンに画像を設定する
'  引  数: hCmdBtn     … コマンドボタンのハンドル
'           SetPicture  … 設定する画像を読み込んだピクチャーボックス
'  返り値: なし
'---------------------------------------------------------------------------
Public Sub SetPictureToCmdBtn(ByVal hCmdBtn As Long, ByVal SetPicture As PictureBox)
    Dim NewBtnStyle As Long

    'ボタン様式に BS_BITMAP を追加
    NewBtnStyle = GetWindowLong(hCmdBtn, GWL_STYLE) Or BS_BITMAP
    
    '設定反映
    Call SetWindowLong(hCmdBtn, GWL_STYLE, NewBtnStyle)

    '画像設定
    Call SendMessage(hCmdBtn, BM_SETIMAGE, 0&, SetPicture)
End Sub
上記のコードを標準モジュールに書いたら、フォームにコマンドボタンとピクチャーボックスを貼り付け、ピクチャーボックスに画像を設定する。そして以下のように1行コードを書いて実行すべし!!

Call SetPictureToCmdBtn(Command1.hWnd, Picture1)


戻る