C# WindowsDefaultLocation(CW\U USEDEFAULT)在哪里?
我试图找出操作系统是如何在Winforms中定义所谓的WindowsDefaultLocation的。表单具有名为StartPosition的属性,该属性将枚举作为值。其中一个值是WindowsDefaultLocation(=2)。在框架代码中,我发现:C# WindowsDefaultLocation(CW\U USEDEFAULT)在哪里?,c#,winforms,C#,Winforms,我试图找出操作系统是如何在Winforms中定义所谓的WindowsDefaultLocation的。表单具有名为StartPosition的属性,该属性将枚举作为值。其中一个值是WindowsDefaultLocation(=2)。在框架代码中,我发现: public enum FormStartPosition 对枚举的注释: WindowsDefaultLocation = 2; 是 表单位于Windows默认位置,其边界由Windows默认值确定 在设置窗体位置的方法(对于Windo
public enum FormStartPosition
对枚举的注释:
WindowsDefaultLocation = 2;
是
表单位于Windows默认位置,其边界由Windows默认值确定
在设置窗体位置的方法(对于WindowsDefaultLocation)中,我发现:
在哪里
其他枚举(例如:CenterScreen)包含一些数学计算,这是可以理解的
cp.X = Math.Max(clientRect.X, clientRect.X + (clientRect.Width - cp.Width)/2);
cp.Y = Math.Max(clientRect.Y, clientRect.Y + (clientRect.Height - cp.Height)/2);
所以我的问题是:新创建表单的Windows默认位置在哪里?每次应用程序启动或/和新表单初始化并显示时,操作系统如何定义它?位置由操作系统决定,该算法的实现可能因操作系统版本而异 Raymond Chen在网站上解释了“未指定版本的Windows”的规则
基本上,如果特定监视器(如父窗口)没有其他原因,则该窗口将放置在主监视器上,并且该监视器上的位置将与以前的默认位置偏移。此链接可能会让您了解Windows如何决定“它存在于未指定版本的Windows中”:默认位置也可以由生成您的程序通过调用CreateProcess来更改。@C.Evenhuis:Nice。我仍在寻找该链接。@C.Evenhuis:请将您的评论升级为答案,以便我接受。提供的链接中的文章100%回答了我的问题。非常感谢。
CW_USEDEFAULT = (unchecked((int)0x80000000))
cp.X = Math.Max(clientRect.X, clientRect.X + (clientRect.Width - cp.Width)/2);
cp.Y = Math.Max(clientRect.Y, clientRect.Y + (clientRect.Height - cp.Height)/2);