gpt4 book ai didi

c# 将窗体固定到桌面

转载 作者:行者123 更新时间:2023-11-30 19:50:36 29 4
gpt4 key购买 nike

我正在尝试将表单固定到桌面,例如小工具边栏。

它应该不受 Win+D 和显示桌面按钮的影响。

最好的方法是什么?

我可以找到 Progman 并将我的表单的父级设置为此,但我发现这不是最好的方法。

最佳答案

免责声明:仅仅因为您可以在 WinForms 中以特定方式执行某些操作而无需 API 调用或“ Hook ”,并不意味着您应该使用该技术。使窗体/窗口不可移动、最顶层等的 API 调用非常简单。请注意,通常的 API“简单技术”会遇到与下面演示的出现在桌面上的文件和文件夹图标上的技术相同的问题。

请注意,通过“干扰”Windows-D 组合键和任务栏中“显示桌面”图标的设计行为,您正在对用户机器进行非标准配置:常见的“智慧”表示这样做不是一个好主意!

“伪侧边栏”可以在 Vista 的 C# WinForms 中模拟...不受 Windows-D 隐藏或使用系统托盘中的“显示桌面”图标 hickey 的影响...无需 API 调用或“hooking”:但是有一个catch:窗体/窗口将出现在桌面上的项目(文件夹、文件)之上,并且由于它是不可移动的,您不会能够访问“在其下”的项目。如果您愿意“忍受”该限制:请继续阅读 :) 另一个“较小的怪异”在本文末尾指出。

示例:

  1. 在 Visual Studio 中创建一个新的表单解决方案:

    一个。设置Form的大小、背景色等,随心所欲

    添加您的控件或用户控件。

    如果您希望始终出现在其他应用程序窗口的前面,请将窗体的“TopMost”属性设置为“true”,如果您希望其他应用程序的窗口能够出现在它前面,请将其设置为“false”。

  2. 将窗体的“ControlBox”、“MinimizeBox”和“MaximizeBox”属性设置为“false”。

  3. 将“FormBorderStyle”设置为“属性浏览器”下拉列表中显示的“固定样式之一”。正如您可能知道的那样,将 FormBorderStyle = FixedToolWindow 与 Form 的 Text 属性一起使用是一个“空字符串”:您将拥有一个没有 TitleBar 和 Caption 的窗口。讨论:是的,如果您愿意,您可以允许调整它的大小:只需在 SizeChanged 处理程序中编写一些代码,并使表单保持解锁状态。

  4. 这些事件处理程序应该让您了解需要什么才能使表单不可关闭、不可移动、不可最小化等。

......... 草图代码 p.o.c.如下:显然您可以重构、改进...

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}

// set your Form's 'Top here ...
private void Form1_LocationChanged(object sender, EventArgs e)
{
this.Top = 100;
this.Left = Screen.PrimaryScreen.Bounds.Width - this.Width;
}

private void Form1_VisibleChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized) this.WindowState = FormWindowState.Normal;
}

private void Form1_Deactivate(object sender, EventArgs e)
{
this.Activate();
}

private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized) this.WindowState = FormWindowState.Normal;
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("button1 is alive");
}

'button1 的'Click 事件处理程序在那里做什么?只是为了在我的测试中验证表单是否可用。

在上面的“停用事件处理程序”中重新激活表单,使表单不受 Windows-D 和“显示桌面”的影响:但这在 Vista 中也有一个奇怪的副作用:当您将焦点移开时从窗体的窗口(例如,通过单击桌面上的文件夹):任务栏将弹起,停留,(如果它被隐藏)并闪烁一会儿:我想告诉你它渴望保持活跃。

忍受卡在打开状态的 TaskBar 可能是使用此“ersatz 侧边栏”而不是使用 API 的另一个代价。

注意:不要忘记:你想要'不透明度:你有'不透明度:)

[1] 注意:您是否想考虑为用户提供隐藏或关闭表单的方法? [/1]

关于c# 将窗体固定到桌面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2080968/

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