C# WindowsDefaultLocation(CW\U USEDEFAULT)在哪里?

C# WindowsDefaultLocation(CW\U USEDEFAULT)在哪里?,c#,winforms,C#,Winforms,我试图找出操作系统是如何在Winforms中定义所谓的WindowsDefaultLocation的。表单具有名为StartPosition的属性,该属性将枚举作为值。其中一个值是WindowsDefaultLocation(=2)。在框架代码中,我发现: public enum FormStartPosition 对枚举的注释: WindowsDefaultLocation = 2; 是 表单位于Windows默认位置,其边界由Windows默认值确定 在设置窗体位置的方法(对于Windo

我试图找出操作系统是如何在Winforms中定义所谓的WindowsDefaultLocation的。表单具有名为StartPosition的属性,该属性将枚举作为值。其中一个值是WindowsDefaultLocation(=2)。在框架代码中,我发现:

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);