📜  引导程序(第9部分)|工具提示(1)

📅  最后修改于: 2023-12-03 15:39:31.768000             🧑  作者: Mango

引导程序(第9部分)|工具提示

什么是引导程序?

引导程序(bootloader)是计算机启动时最先执行的程序,作用是初始化计算机硬件并加载操作 系统内核。引导程序通常会储存在计算机的非易失存储器中,例如硬盘、SSD或闪存。

工具提示是什么?

工具提示(tooltip)是一种用户界面设计元素,通常出现在鼠标悬停在某个控件或文本上时。工具 提示通常包括一个小的、浮动的文本框或者一个简短的文本字符串,用于提供用户有用的附加信息。

如何在引导程序中使用工具提示?

在引导程序中,通常使用GUI库或者UI框架来实现用户界面,例如UEFI BIOS界面就是通过UEFI图形界面库 (UGL)实现的。在UGL中,可以使用UEFI的Toolbox库来创建工具提示。

在UEFI中,可以通过调用CreateToolTip()函数来创建一个工具提示。以下是一个示例代码:

EFI_STATUS CreateToolTip(CHAR16* TooltipString, UINT32 x, UINT32 y) {
  EFI_HII_HANDLE hiiHandle;
  EFI_STATUS status;
  EFI_IMAGE_INPUT input = {0};
  EFI_IMAGE_OUTPUT output = {0};

  // 获取 HII handle
  hiiHandle = HiiGetPrimaryLanguages();

  // 设置 Tooltip 字符串
  input.Width = StrLen(TooltipString)*19; // 字数乘以字宽度
  input.Height = 19; // 一行高度为 19 像素
  input.LineWidth = input.Width * sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL);

  input.Image.Bitmap = AllocatePool(input.LineWidth * input.Height);
  input.Image.BitmapClear = EfiZeroMem;

  // 绘制 Tooltip 的样式
  BltColorFill(input.Image.Bitmap, EfiColorMake(128, 128, 128, 255), 0, 0, input.Width, input.Height);
  BltColorFill(input.Image.Bitmap, EfiColorMake(255, 255, 128, 255), 1, 1, input.Width-1, input.Height-1);
  DrawText(input.Image.Bitmap, 3, 3, EfiColorMake(0, 0, 0, 255), EfiColorMake(128, 128, 128, 255),
           TooltipString, (UINT32)StrLen(TooltipString));

  // 创建 Tooltip
  status = gBS->CreatePopUp(EFI_POPUP_TYPE_TOOLTIP, &hiiHandle, &output, &input);
  if (status != EFI_SUCCESS) {
    return status;
  }
  
  // 显示 Tooltip
  status = UgaDrawImage(output.Image.Bitmap, output.Image.ImageWidth, output.Image.ImageHeight,
                        x, y - output.Image.ImageHeight);
  if (status != EFI_SUCCESS) {
    return status;
  }

  // 记得释放内存
  FreePool(input.Image.Bitmap);
  gBS->FreePool(output.Image.Bitmap);

  return EFI_SUCCESS;
}
总结

引导程序是计算机启动时最先执行的程序,工具提示是一种用户界面设计元素,在UEFI引导程序中可以使 用UEFI Toolbox库来创建工具提示。