C# 将窗体的父级设置为“0”;芬德温道;
我正在做一个覆盖层。我这里有这个密码C# 将窗体的父级设置为“0”;芬德温道;,c#,c,parent,setparent,C#,C,Parent,Setparent,我正在做一个覆盖层。我这里有这个密码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace HyperBox
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.TopMost = true; // make the form always on top
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; // hidden border
this.WindowState = FormWindowState.Maximized; // maximized
this.MinimizeBox = this.MaximizeBox = false; // not allowed to be minimized
this.MinimumSize = this.MaximumSize = this.Size; // not allowed to be resized
this.TransparencyKey = this.BackColor = Color.Red; // the color key to transparent, choose a color that you don't use
// Set the form click-through
int initialStyle = GetWindowLong(this.Handle, -20);
SetWindowLong(this.Handle, -20, initialStyle | 0x80000 | 0x20);
}
[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int SetParent(int hWndChild, int hWndNewParent);
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// draw what you want
e.Graphics.FillEllipse(Brushes.Blue, 30, 30, 100, 100);
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
它在形状上绘制一个椭圆,该形状是透明的,并且始终在顶部。问题是它不能在全屏上工作
我试过用这个
SetParent(this.handle, FindWindow(null, "<parent window title here>"));
SetParent(this.handle,FindWindow(null,”);
除非我有错误。有人能帮忙吗?我相信你的错误就在这里
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int SetParent(int hWndChild, int hWndNewParent);
它需要两个类型为IntPtr
notint
的参数,并返回IntPtr
而不是int
提供更多信息。有关一些好的C#示例,请参见底部的用户贡献
请记住,与DllImport
一起使用时,是对非托管代码的引用。user32.dll中名为SetParent()
的方法没有接受两个int
s作为参数的定义
因此,该块应为:
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
我对您得到的错误感到好奇…错误是:参数1:无法从'System.IntPtr'转换为'int'参数2:无法从'System.IntPtr'转换为'int'行:SetParent(this.Handle,FindWindow(null,”);