关于窗口还原位置的小知识
如果你的窗口最小化了,你想知道这个窗口还原后的位置,可以使用这个API: GetWindowPlacement。这个API会接受一个WINDOWPLACEMENT的结构体指针,并将窗口的位置信息填充到这个结构体中。
特别需要注意的是,这个结构体有一个rcNormalPosition参数,它告诉你当窗口从最小化状态还原时,窗口的目标还原位置。
另外,还有一个不是那么显而易见的标志WPF_RESTORETOMAXIMIZED,这个标志指示窗口当前是最小化状态,但是如果用户点击还原,则它会还原到最大化状态,而不是还原到它之前的状态。
可能这看起来有点奇怪,但是实际上你每天都会碰到这种情况。假设我们这样操作一下:打开一个窗口,然后最大化窗口。这个时候,我们最小化这个窗口。然后点击任务栏的窗口按钮来重新打开窗口。请注意,这个窗口将会恢复到它的最大化状态,而不是它的普通还原状态。可以想象,如果窗口没有还原到最大化状态会显得很奇怪,因为你不得不需要重新最大化这个窗口。
GetWindowPlacement和SetWindowPlacement这两个API主要是用在那些希望保存/还原窗口位置信息的程序中。
另外一个需要注意的地方是,GetWindowPlacement和SetWindowPlacement使用的坐标系统不是屏幕坐标系,而是工作区坐标系(workspace coordinates)。
如果你弄错了这个坐标系,导致的结果是:随着时间的推移,窗口会向上(或向左)倾斜,最终这个窗口自己会卡在任务栏下方。
总结
有点惭愧,搞了这么多年的桌面开发,GetWindowPlacement这个API我是一次都没用过。
有空研究研究。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Obtaining a window’s size and position while it is minimized》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
领取专属 10元无门槛券
私享最新 技术干货