3

我遇到了与此问题中讨论的问题类似的问题

我已经WiXUIBannerBmp按照上面链接中建议的尺寸(493px x 58px)创建了一个自定义图像,但它看起来很糟糕,因为它仍在缩放。我屏幕上的实际尺寸似乎约为 616 像素 x 73 像素。616 = 493 * 1.25 和 73 = 58 * 1.25(大约)。你猜怎么着?在我的显示设置中,我将屏幕缩放 125%。

有人知道处理这个问题的方法吗?我可以,例如:

  • 检测分辨率比例并为不同比例提供不同的文件?
  • 在我的图像上设置“不缩放”标志?
  • 提供可靠缩放的图像格式,即不是 bmp 或 jpg?
  • 还有其他想法吗?

非常感谢

更新

我发现这个问题的唯一参考是SourceForge 上的这篇文章,但我找不到 Rob 在他的回复中提到的错误。有谁知道是否有人提出并采取了行动?

4

1 回答 1

0

您可以使用自定义操作来读取屏幕分辨率并动态填充图像控件,这样:

[CustomAction]
public static ActionResult GenInstallationReview(Session session)
{
    // Insert Control Bitmap in Control table (MSI database).
    Record record = session.Database.CreateRecord(12);
    record.SetString(1, "Dialog_Review"); // Dialog_
    record.SetString(2, "Bitmap_Background"); // Control
    record.SetString(3, "Bitmap"); // Type
    record.SetInteger(4, 0); // X
    record.SetInteger(5, 0); // Y
    record.SetInteger(6, 518); // Width
    record.SetInteger(7, 392); // Height
    record.SetInteger(8, 1); // Attributes
    record.SetString(9, ""); // Property
    record.SetString(10, "Binary_Background"); // Text
    record.SetString(11, ""); // Control_Next
    record.SetString(12, ""); // Help

    // Queries the Control table to check if the control was already created.
    List<string> resultList = new List<string>();
    resultList = (List<string>)session.Database.ExecuteStringQuery(
      "SELECT `Control` FROM `Control` WHERE `Control` = 'Bitmap_Background'");

    // Insert or update the table based on if the control was already created.
    if (resultList.Count < 1)
        session.Database.Execute(
          "INSERT INTO `Control` (`Dialog_`, `Control`, `Type`, `X`, `Y`, " +
          "`Width`, `Height`, `Attributes`, `Property`, `Text`, " + 
          "`Control_Next`, `Help`) " + 
          "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) TEMPORARY", record);
    else
        session.Database.Execute(
          "UPDATE `Control` SET `Dialog_`=?, `Control`=?, `Type`=?, `X`=?, " +
          "`Y`=?, `Width`=?, `Height`=?, `Attributes`=?, `Property`=?, " +
          "`Text`=?, `Control_Next`=?, `Help`=? WHERE " +
          "`Control`='Bitmap_Background'", record);

    return ActionResult.Success;
}

这里有一个警告,如果图像填满了对话框(例如背景图像),z-order 将会被打乱。你需要做一些调整:

  • 使用自定义操作创建所有控件;或者
  • 更改Control_Next以使您的动态控制成为焦点循环的一部分(尽管未使用)并更新Control_FirstDialog 表以使用它。
于 2014-05-15T16:57:26.053 回答