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& '--------------------------------------------------------------------------- ' 関数名: 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) |