大家有没有用过桌面时钟,桌面日历之类的程序,鼠标穿透功能如何实现的?
解决方案 »
- C# 调用DLL一个方法提示尝试读取或写入受保护的内存
- 谁试过用C#+API挑战MessageBoxIndirect
- 急!急!急!本人即将答辩!!!请各位哥哥姐姐们帮帮我!!!
- 谁能给一个C#pop3的处理程序
- ASP.NET的奇怪问题
- 找一些C#方面的资料!!!!!!!!!!!!!!!!!
- 你们显示报表是用什么控件的?是CrystalReportViewer吗?谢
- 为什么安装Studio.net2003时,一直提示系统某些组件与软件要求不符而不能安装?我的系统是XP.SP2.请教是什么原因?
- 请高手们看看,我是否应该毕业了到软件工司工作,还是出国呢?来者给分
- C#的FormMain.cs中如何显示现有的Form2.cs窗口?
- 怎样突出显示鼠标所指的控件
- 如何终止一个已挂起的线程?
可见部分穿透你是不是指透明的那种,那是通过可见度来设置的.
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or
WS_EX_TRANSPARENT or //忽略一切消息(WM_PAINT除外)
WS_EX_LAYERED); //层风格,有他才能支持半透明
SetLayeredWindowAttributes(Handle, Color, 100, LWA_ALPHA or LWA_COLORKEY);
代码很简单,应该能满足你的需要
现在的问题是,我的窗口是不透明的,比如我挡在word程序前面,当用户在我的
窗口上右键的时候,我的窗口却把消息传递给了word,word弹出他的菜单,虽然
我的窗口能看见,但是在操作和使用的时候,就像我的窗口不存在一样。这个
功能叫做鼠标穿透,不叫窗体透明,明白?这个东西就是用于在任何窗体之前
显示时钟,而我不希望时钟程序本身能够相应任何键盘鼠标事件。用户点击时钟
的时候,实际上透过时钟界面点击到了时钟下一层的程序上。
{
System.Drawing.Drawing2D.GraphicsPath myGraphicsPath = new
System.Drawing.Drawing2D.GraphicsPath();
Point[] pt={
new Point(0,30),
new Point(0,0),
new Point(30,0),
new Point(30,5),
new Point(5,5),
new Point(5,30),
new Point(0,30) };
myGraphicsPath.AddLines(pt);
Point[] pt1={
new Point(170,0),
new Point(200,0),
new Point(200,30),
new Point(195,30),
new Point(195,5),
new Point(170,5),
new Point(170,0)
};
myGraphicsPath.AddLines(pt1);
this.Region = new Region(myGraphicsPath);
}