我尝试创建一个始终位于顶部且透明,点击通过的表单,并且纯粹用于绘制永不丢失焦点的信息,因此始终显示在顶部。我的想法是能够在我的屏幕上绘制信息,这些信息将始终位于每个其他窗口的顶部,很可能只是简单的文本,但不会阻止我与其他程序交互,同时仍然可见。
我遇到的麻烦就是让表单始终处于最佳状态,尽管其他程序都是重点。我已经尝试过使用TopMost属性,但这似乎不起作用,并且已经玩过让窗口重新聚焦于不聚焦,但这似乎有点草率,无论如何都无法工作。我在Windows 8.1上是否重要。
非常感谢任何回复,谢谢。
答案 0 :(得分:-1)
您必须使用扩展窗口样式,此代码显示如何执行此操作。
此表单将鼠标交互传递给其后面的表单,即使其他Top Most窗口处于活动状态,也会显示为TopMost。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
const int GWL_EXSTYLE = -20;
const int WS_EX_TRANSPARENT = 0x20;
[DllImport("user32.dll", CharSet=CharSet.Auto)]
extern static int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
extern static int SetWindowLong(IntPtr hWnd, int nIndex, int nStyle);
private void Form1_Load(object sender, EventArgs e)
{
var style = GetWindowLong(this.Handle, GWL_EXSTYLE);
var newStyle = style | WS_EX_TRANSPARENT;
SetWindowLong(this.Handle, GWL_EXSTYLE, newStyle);
}
private void timer1_Tick(object sender, EventArgs e)
{
this.BringToFront();
}
}
用户与表单进行交互将是一个小技巧,您必须提供有关您尝试做的更多详细信息,以便我们提供帮助。
要始终将窗口显示在顶部,请设置间隔为100毫秒的计时器,并将表单属性 TopMost 设置为true。