免责声明:仅仅因为你可以在没有API调用或"挂钩"的WinForms中以某种方式做某事,并不意味着你应该使用这种技术.API要求使窗体/窗口不可移动,最顶层等非常简单.请注意,通常的API"简单技术"将具有与下面演示的技术相同的问题,该技术出现在桌面上的文件和文件夹图标上.
请注意,通过"干扰"Windows-D组合键的设计行为和TaskBar中的"Show Desktop"图标 - hickey,您正在进行用户机器的非标准配置:常见的"智慧"表示它不是这样做是个好主意!
可以在Vista中使用C#WinForms模拟"伪边栏"...不受Windows-D隐藏或使用系统托盘中的"显示桌面"图标 - 没有API调用或"挂钩" :但有一个抓:窗体/窗口会出现在桌面上(文件夹,文件)项目的顶部,并凭借其为不可移动的,您将无法访问其下的项目". " 如果你愿意"忍受"这个限制:请继续阅读:)另一个"较小的怪异"在此结束时提到.
示例:
在Visual Studio中创建一个新的Form解决方案:
一个.设置表格的大小,背景颜色等
湾 添加您的控件或用户控件.
C.如果你想要总是出现在其他应用程序的窗口前面,将Form的'TopMost属性设置为'true',如果你希望其他应用程序的窗口能够出现在它前面,则为false.
将"ControlBox","MinimizeBox"和"Formize的MaximizeBox属性"设置为"false".
将"FormBorderStyle"设置为"属性浏览器"下拉列表中显示的"固定样式"之一.您可能知道使用FormBorderStyle = FixedToolWindow,Form的Text属性为"空字符串":您将拥有一个没有TitleBar和Caption的窗口.讨论:是的,如果您愿意,可以允许调整大小:只需在SizeChanged处理程序中编写一些代码,然后保持表单解锁.
这些事件处理程序应该让您了解使表单不可关闭,不可移动,不可最小化等所需的内容.
.........粗略的草图代码poc如下:显然你可以重构,改进......
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");
}
Run Code Online (Sandbox Code Playgroud)
什么是'button1在那里做点击事件处理程序?只是在我的测试中验证表格是否可用.
这是在上面的'Deactivate Event处理程序中重新激活Form,使Form不受Windows-D和"Show Desktop"的影响:但是在Vista中也有一个奇怪的副作用:当你将焦点从Form转移时窗口(例如,通过点击桌面上的文件夹):任务栏将弹起,熬夜,(如果它被隐藏)并闪烁一段时间:我想向你展示它渴望活跃.
提出一个开放的TaskBar可能是使用这个"ersatz侧边栏"的另一个代价,而不是使用API.
注意:别忘了:你想要'不透明度:你有'不透明度:)
[1]注意:您确实想考虑为用户提供隐藏表单或关闭表单的方法吗?[/ 1]
归档时间: |
|
查看次数: |
7030 次 |
最近记录: |