gpt4 book ai didi

c# - 安装应用程序中的进度条

转载 作者:太空宇宙 更新时间:2023-11-03 16:57:12 24 4
gpt4 key购买 nike

我已经为我的安装项目创建了一个自定义操作,并成功地实现了一个表单,该表单在我的安装中显示一个下载步骤的进度条(我在我的自定义操作代码中使用了 WebClient)。所以我有两个相互关联的问题。

  1. 有没有什么方法可以在主设置窗口中显示下载进度条,而不是创建一个单独的表单来显示?我更喜欢这个。

  2. 如果不是,那么在我调用 form.ShowDialog() 时我该怎么做才能使我的表单显示在实际设置窗口的前面?我还在上面调用了 BringToFront() ,但它也不起作用。它在那里,但它总是在主设置窗口后面。似乎必须有一些方法来获得正确的 z 顺序。

感谢您的帮助。

最佳答案

所以我放弃了将进度条集成到实际安装程序屏幕中的想法,但让 Windows 窗体显示在顶部所需要的一切简直荒谬。我必须获得安装程序窗口的句柄并将其发送到后台,因为将进度条窗口向前移动根本行不通。我现在已经转向 Mac 开发,所以回到这里真是令人沮丧。我记得当时认为 C# .NET 非常酷。它在 Cocoa/Objective-C 上一无所获。

令人气愤的是有一个名为 BringToFront() 的方法完全忽略了您。为什么我必须使用 Windows API 代码来做一些像管理 Z-Order 这样对 GUI 很基础的事情? Z顺序?认真的吗?

如果您想知道,这就是我最终所做的(通过谷歌):

[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern bool SetWindowPos(
IntPtr hWnd, // window handle
IntPtr hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
uint uFlags); // window positioning flags

public const uint SWP_NOSIZE = 0x1;
public const uint SWP_NOMOVE = 0x2;
public const uint SWP_SHOWWINDOW = 0x40;
public const uint SWP_NOACTIVATE = 0x10;

[DllImport("user32.dll", EntryPoint = "GetWindow")]
public static extern IntPtr GetWindow(
IntPtr hWnd,
uint wCmd);

public const uint GW_HWNDFIRST = 0;
public const uint GW_HWNDLAST = 1;
public const uint GW_HWNDNEXT = 2;
public const uint GW_HWNDPREV = 3;

public static void ControlSendToBack(IntPtr control)
{
bool s = SetWindowPos(
control,
GetWindow(control, GW_HWNDLAST),
0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
}

我获得安装程序窗口的句柄,然后对其调用 ControlSendToBack()。它有效,但它会将它发送到最后。我尝试了另一种只会将其发送回一个位置的方法,但这也不起作用。 Windows 编程——与 1995 年一样出色。酷。

关于c# - 安装应用程序中的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1350057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com