Forms 记住关闭了哪个显示应用程序

Forms 记住关闭了哪个显示应用程序,forms,vb6,Forms,Vb6,非常简单的问题:我如何告诉VB6应用程序记住它关闭时的显示,然后当应用程序再次启动时,在监视器上显示主窗体?为什么不在退出之前保存窗口的位置和大小,然后在启动时恢复?您需要按监视器定位吗?为什么不在退出之前保存窗口的位置和大小,然后在启动时恢复?您需要按监视器定位吗?您不需要知道所有监视器。在这种情况下,你只是在做 在本例中,假设您有两个监视器设置,主监视器位于次监视器的左侧,并且两个监视器的分辨率均为1024x768 不要将您的应用程序想象为在多显示器环境中运行,而应将其想象为在2048x76

非常简单的问题:我如何告诉VB6应用程序记住它关闭时的显示,然后当应用程序再次启动时,在监视器上显示主窗体?

为什么不在退出之前保存窗口的位置和大小,然后在启动时恢复?您需要按监视器定位吗?

为什么不在退出之前保存窗口的位置和大小,然后在启动时恢复?您需要按监视器定位吗?

您不需要知道所有监视器。在这种情况下,你只是在做

在本例中,假设您有两个监视器设置,主监视器位于次监视器的左侧,并且两个监视器的分辨率均为1024x768

不要将您的应用程序想象为在多显示器环境中运行,而应将其想象为在2048x768的单台桌面上运行的应用程序

在这种情况下,您所需要做的就是确定它在桌面上的位置,其余部分由Windows处理。您不必担心它在哪个监视器上:如果将窗口设置为显示在框0,0-1023767中,则它将显示在主屏幕上。如果co ORD在框1024,0-2047767内,则它显示在辅助监视器上


这只是要求Windows告诉您应用程序窗口的大小和位置。为此,您需要查看GetWindowRect和SetWindowPos。这里有一个如何使用GetWindowRect的示例。VB可能有一种不借助Win32 API的本机方式来实现这一点,但我面前没有VB6可供测试。

您不需要知道所有监视器。在这种情况下,你只是在做

在本例中,假设您有两个监视器设置,主监视器位于次监视器的左侧,并且两个监视器的分辨率均为1024x768

不要将您的应用程序想象为在多显示器环境中运行,而应将其想象为在2048x768的单台桌面上运行的应用程序

在这种情况下,您所需要做的就是确定它在桌面上的位置,其余部分由Windows处理。您不必担心它在哪个监视器上:如果将窗口设置为显示在框0,0-1023767中,则它将显示在主屏幕上。如果co ORD在框1024,0-2047767内,则它显示在辅助监视器上


这只是要求Windows告诉您应用程序窗口的大小和位置。为此,您需要查看GetWindowRect和SetWindowPos。这里有一个如何使用GetWindowRect的示例。VB可能有一种不借助Win32 API的本机方式来实现这一点,但我面前没有VB6可供测试。

我有。应用程序总是在主显示器上启动,即使它在辅助显示器上关闭。不,我不是这么说的。我说过,您可以保存表单的位置,然后在启动时重新定位表单。这与保存显示在哪个监视器上完全不同,我想知道的是,这是否真的是一项要求。这并不重要,我需要的最终结果是,表单以完全相同的方式打开,即它被最大化或还原,并在同一显示器上的相同位置。我不知道该怎么做,或者我是否需要特殊代码来检测它当前是否显示在哪个屏幕上。您唯一需要做的是保存表单的位置和大小。左、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右。然后,在启动时,使用GetSetting读取设置并将它们恢复到您的表单您都是对的,但@Onkelborg首先是对的。只需将这5个值保存在Load/Unload表单上就可以完美地工作。我不知道这个解决方案会与多显示器设置一起工作,但显然它确实看到了@Chris J的帖子来解释原因。我知道。应用程序总是在主显示器上启动,即使它在辅助显示器上关闭。不,我不是这么说的。我说过,您可以保存表单的位置,然后在启动时重新定位表单。这与保存显示在哪个监视器上完全不同,我想知道的是,这是否真的是一项要求。这并不重要,我需要的最终结果是,表单以完全相同的方式打开,即它被最大化或还原,并在同一显示器上的相同位置。我不知道该怎么做,或者我是否需要特殊代码来检测它当前是否显示在哪个屏幕上。您唯一需要做的是保存表单的位置和大小。左、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右。然后,在启动时,使用GetSetting读取设置并将它们恢复到您的表单您都是对的,但@Onkelborg首先是对的。只需将这5个值保存在Load/Unload表单上就可以了
很好。我不知道这个解决方案会与多监视器设置一起工作,但显然它确实看到了@Chris J的帖子,解释了为什么.VB6有Me.Top/Left/Height/Width,其中Me是当前形式,所以是的,这是正确的。但是要容忍配置更改会变得更加棘手:在第二个监视器消失的地方进行后续运行,或相对于第一个Bob逻辑移动,等等+1 Bob。顺便说一句,卡尔·彼得森写了一篇关于VB6中多个监视器的文章。他的文章总是值得一读。VB6有Me.Top/Left/Height/Width,其中Me是当前形式,因此是的,这是正确的。但要容忍配置更改会变得更加棘手:第二个监视器不在的后续运行,或相对于第一个监视器的逻辑移动,等等+1 Bob。顺便说一句,卡尔·彼得森写了一篇关于VB6中多个监视器的文章。他的文章总是值得一读。