📅  最后修改于: 2023-12-03 15:39:31.768000             🧑  作者: Mango
引导程序(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库来创建工具提示。