我的问题是这样的,我想制作一个类似“桌面天气秀”的软件,现在想实现他的界面界面效果,天气秀窗体的背景是一张半透明的PNG图片,程序运行后可以透过PNG图片看到桌面上的东西。现在我在csdn上面找到了类似的答案。
地址如下:http://topic.csdn.net/t/20051203/15/4435788.html
但是layered windows后,无法添加控件,可以用另一个窗体来添加控件,但是如何能做到这两个窗体的同步移动呢?还请多各位高手多多帮忙!或者大家可以不用这种方式也可以,只要能实现这个功能就行!
ps:可以说是类似磁性窗体的这种效果
地址如下:http://topic.csdn.net/t/20051203/15/4435788.html
但是layered windows后,无法添加控件,可以用另一个窗体来添加控件,但是如何能做到这两个窗体的同步移动呢?还请多各位高手多多帮忙!或者大家可以不用这种方式也可以,只要能实现这个功能就行!
ps:可以说是类似磁性窗体的这种效果
解决方案 »
- 求助,多线程操作 datagridview出现错误
- 高手们帮帮忙给个C#点对点文件传输的代码
- 创建XML文件
- 请问两个wcf双工问题
- 如何组织项目
- 在C# 中对于code39码的44个字符, 用条形扫描枪扫不出来星号(×)和加号(+)?高分求就!!!
- treeview问题.我的TreeView控件用localhost可以访问,但是用ip和机器名访问的时候都会出问题
- 在网页中加入<script src="URL"></script>调用远程服务器上的js文件怎么不出效果
- 怎样用最快的算法将一万条记录分类,找出其中相同的记录及其数量?用C#来写喔
- 我现在加了两个窗体,如何在一个窗体显示另一个窗体???
- 图象交换 怎么实现??
- 关于控件生成的问题!急~~~~~~~~~~
f.LocationChanged +=
public partial class Form1 : Form
{
Form f2 = new Form2(); public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
f2.Show();
} protected override void WndProc(ref Message m)
{
const int WM_MOVE = 0x3; if (m.Msg == WM_MOVE)
f2.Location = new Point(this.Left + this.Width, this.Top); base.WndProc(ref m);
}
}
谢谢你的代码,但是我是需要的是精确定位的那种,因为我想实现的效果就是一个窗体完全覆盖在另一个窗体之上,当上面的窗体移动时,下面的窗体和他同步移动,最后的效果还是一个窗体覆盖在另一窗体之上,你提供的代码虽然能够实现2个窗体的同步移动,但是却不能进行精确的移动。
to kmblack1(black) :
你提供的代码不全,我没有看懂,请见谅!能否提供一个详细的代码呢?
总之,谢谢上面提到的两位朋友的热心帮助!
希望广大的朋友在继续帮忙,先谢谢大家了!
Form2 form2 = new Form2();
form2.LocationChanged += new EventHandler(form2_LocationChanged);
form2.Show();
相应的事件
void form2_LocationChanged(object sender, EventArgs e)
{
Form2 form2 = (Form2)sender;
this.Location = form2.Location;
}
{
private Form2 m_form2; public Form1()
{
InitializeComponent();
this.m_form2 = new Form2();
this.m_form2.Owner = this;
} protected override void OnLoad(EventArgs e)
{
this.m_form2.Location = new Point(this.Location.X + this.Width,this.Location.Y );
this.m_form2.Show();
base.OnLoad(e);
}
}
{
private Form1 m_form1;
public Form2()
{
InitializeComponent();
this.StartPosition = FormStartPosition.Manual;
this.WindowState = FormWindowState.Normal;
} private void form1_LocationChanged(object sender, EventArgs e)
{
this.Location = new Point(this.m_form1.Location.X + this.m_form1.Width, this.m_form1.Location.Y);
} protected override void OnLoad(EventArgs e)
{
this.m_form1 = (Form1)this.Owner;
this.m_form1.LocationChanged += new EventHandler(form1_LocationChanged);
base.OnLoad(e);
}
}
注册表里也有相应的项,位置我记不太清了,改一下就好了
非常感谢你的代码,按照你的代码指示,我已经能够完成这种效果,但是现在还有个小问题,就是如何能保证这两个窗体重叠在一起呢?
改为
this.Location = new Point(this.m_form1.Location.X, this.m_form1.Location.Y);
如果要重在一起,你要写另外的方法来分别显示两个窗体尽量使用事件完成的功能,当事件不能满足要求时才使用WndProc,比如你要监视光标和键盘消息等