将该窗口用Show()显示,就不是模态窗口(拥有该程序的焦点)
解决方案 »
- datagridview如何实现EXCEL向下拖动右下角功能
- 关于C/S架构
- 一个老问题,C#如果检测并屏蔽变速齿轮
- DevExpress XtraCharts 如何让两个Series的坐标一致
- 关于超链接传值的问题。。。
- C# 的容器相关的问题。本人初学C#
- 关于C#从服务启动窗体的问题
- 12月7号晚在线等!!!我想在类中定义一个方法,需要返回该方法里的多个值,请问如何定义啊???急!!!
- 我刚装了XP 专业版,及VS2003,在新建ASP.NET WEB 应用程序工程时, 报错
- 我怎么把前一个form中的datagrid中的选中的行列值传递到下一个form中?
- 初步猜测和连接池有关的问题
- 无焦点窗体问题,谢谢xiongchen,请进!
我看QQ和MSN的弹出消息窗体就不抢占其它程序的焦点!
using System.Runtime.InteropServices;//声明API
[DllImport("user32")]
private static extern bool AnimateWindow(IntPtr hwnd,int dwTime, int dwFlags);
const int AW_HOR_POSITIVE = 0x0001;
const int AW_HOR_NEGATIVE = 0x0002;
const int AW_VER_POSITIVE = 0x0004;
const int AW_VER_NEGATIVE = 0x0008;
const int AW_CENTER = 0x0010;
const int AW_HIDE = 0x10000;
const int AW_ACTIVATE = 0x20000;
const int AW_SLIDE = 0x40000;
const int AW_BLEND = 0x80000;
//窗体加载时的动画效果API
AnimateWindow(this.Handle,1000, AW_VER_NEGATIVE |AW_ACTIVATE);//从下到上且不占其它程序焦点
/*下面是AnimateWindow的具体说明
AnimateWindow API
函数AnimateWindow.
尽管MSDN页面上说这个函数是Win2000的最新函数,但经网友证实在Win98里就已经有这个函数了:Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Long其中:
hwnd只对Form有效,其他像Picture1都无法产生效果。
dwTime是动画持续的时间,默认为200。
dwFlags可取以下值:
AW_HOR_POSITIVE ( &H1 ) '从左到右打开窗口
AW_HOR_NEGATIVE ( &H2 ) '从右到左打开窗口
AW_VER_POSITIVE ( &H4 ) '从上到下打开窗口
AW_VER_NEGATIVE ( &H8 ) '从下到上打开窗口
AW_CENTER ( &H10 ) '看不出任何效果
AW_HIDE (&H10000) '在窗体卸载时若想使用本函数就得加上此常量
AW_ACTIVATE (&H20000) '在窗体通过本函数打开后,默认情况下会失去焦点,除非加上本常量
AW_SLIDE (&H40000) '看不出任何效果
AW_BLEND (&H80000) '淡入淡出效果最后一个就是我要找的,遗憾的是只对Win2000有效。下边是窗体淡入的效果,如果没有Win2000的话就看不出来了:
*/
http://community.csdn.net/Expert/TopicView3.asp?id=3729569下列代码可以实现你的需求,当你构造好一个Form后,不要直接Show它,用WindowsAPI来Show:using System.Runtime.InteropServices;
......
const int SW_SHOWNOACTIVATE = 4;
[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern int ShowWindow(IntPtr hWnd, short cmdShow);
......
private void button4_Click(object sender, System.EventArgs e)
{
Form2 frm = new Form2();
ShowWindow(frm.Handle, SW_SHOWNOACTIVATE);
}
用ShowWindow时,不能调用load事件,而且如果用AnimateWindow动画显示窗体时,窗体还是占用了焦点!