加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 如何获取窗口原始大小和位置(wsNormal vs wsMaximize

发布时间:2020-12-14 02:03:57 所属栏目:Windows 来源:网络整理
导读:我希望存储窗口大小和位置的用户个性化,以便在重新打开应用程序时使用它.这实际上很简单,我有以下代码工作: 在OnCreate: Width := wIni.ReadInteger('FORM','FORMW',980);Height := wIni.ReadInteger('FORM','FORMH',500);PnlXMLI.Width := wIni.ReadInteg
我希望存储窗口大小和位置的用户个性化,以便在重新打开应用程序时使用它.这实际上很简单,我有以下代码工作:

在OnCreate:

Width := wIni.ReadInteger('FORM','FORMW',980);
Height := wIni.ReadInteger('FORM','FORMH',500);
PnlXMLI.Width := wIni.ReadInteger('FORM','PNLXMLIW',500);
WindowState := TWindowState(GetEnumValue(TypeInfo(TWindowState),wIni.ReadString('FORM','WINDOWSTATE','wsNormal')));

的OnDestroy:

wIni.WriteInteger('FORM',Width);
wIni.WriteInteger('FORM',Height);
wIni.WriteInteger('FORM',PnlXMLI.Width);
wIni.WriteString('FORM',GetEnumName(TypeInfo(TWindowState),Ord(WindowState)));

问题是当用户最大化窗口然后恢复它时,它会恢复到最大化之前的大小.但是如果他最大化,然后关闭并重新打开应用程序并恢复它,应用程序将不会在最大化之前恢复到原始大小.它将是屏幕大小,因为宽度和高度属性在读取时提供最大化的大小.

问题是:如何获得窗口的原始大小,即用户恢复窗口时将返回的大小?我尝试在读取宽度和高度之前将WindowState设置为wsNormal,但它不起作用(可能是因为表单被销毁?)…而且我宁愿使用不做不必要的GUI操作的解决方案(源代码美学原因).

提前致谢.

解决方法

您需要的功能是 GetWindowPlacementSetWindowPlacement.这些功能在 WINDOWPLACEMENT结构上运行.该结构具有rcNormalPosition成员,其记录如下:

The window’s coordinates when the window is in the restored position.

当您保存窗口位置和大小时,需要保存rcNormalPosition中的值.在相反的方向,当恢复窗口位置和大小时,您必须调用SetWindowPlacement作为rcNormalPosition传递存储在INI文件中的用户首选项中的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读