【问题标题】:Adding an icon image to context menu in Inno Setup在 Inno Setup 中将图标图像添加到上下文菜单
【发布时间】:2020-09-28 07:44:53
【问题描述】:

我在这里使用脚本向我的 Inno 设置页面添加一些上下文菜单:
Adding context menu to Inno Setup page

有没有办法给每个菜单项添加一个图标图像?

【问题讨论】:

标签: windows winapi inno-setup pascalscript


【解决方案1】:

使用SetMenuItemBitmaps:

[Code]
const
  IMAGE_BITMAP = 0;
  LR_LOADFROMFILE = $10;
  LR_CREATEDIBSECTION = $2000;

function LoadImage(
  hInst: Integer; ImageName: string; ImageType: UINT; X, Y: Integer;
  Flags: UINT): THandle; external 'LoadImageW@User32.dll stdcall';  
function SetMenuItemBitmaps(
  hMenu: THandle; uPosition: Cardinal; uFlags: Cardinal;
  hBitmapUnchecked: THandle; hBitmapChecked: THandle): Boolean;
  external 'SetMenuItemBitmaps@User32.dll stdcall';

procedure AddMenuItem(
  Menu: THandle; Position: Integer; ID: Integer; Caption: string;
  ImageFileName: string);
var
  Bitmap: THandle;
begin
  InsertMenu(Menu, Position, MF_BYPOSITION or MF_STRING, ID, Caption);
  ExtractTemporaryFile(ImageFileName);
  Bitmap := LoadImage(
    0, ExpandConstant('{tmp}\') + ImageFileName, IMAGE_BITMAP, 0, 0,
    LR_LOADFROMFILE or LR_CREATEDIBSECTION);
  SetMenuItemBitmaps(Menu, Position, MF_BYPOSITION, Bitmap, Bitmap);
end;

在来自Adding context menu to Inno Setup page 的代码中使用AddMenuItem 而不是InsertMenu 调用:

AddMenuItem(PopupMenu, 0, ID_MUTE, 'Mute', 'mute.bmp');
AddMenuItem(PopupMenu, 1, ID_STOP, 'Stop', 'stop.bmp');

以上显然假设您已将透明位图图像添加到安装程序中:

[Files]
Source: "mute.bmp"; Flags: dontcopy
Source: "stop.bmp"; Flags: dontcopy

我使用PixelFormer 来创建透明的.bmp 图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多