无论最小化/正常/最大化状态如何,都可获取窗口的当前尺寸

时间:2016-06-07 10:05:24

标签: c winapi

我正试图获得一个顶级水平' HWND的尺寸。即,我想要Firefox / Windows资源管理器/等主要HWND的当前维度。窗口。

如果窗口最小化,

GetWindowRect()将无法工作。 GetWindowPlacement()适用于大多数情况(包括最小化),但它会返回窗口' SW_SHOWNORMAL尺寸。因此,如果我将Windows资源管理器调整为100像素乘100像素,请最大化窗口,然后调用GetWindowPlacement()我将获得100 {100}的SW_SHOWNORMAL尺寸。我想要最大化的尺寸,即窗口的当前尺寸。

是否有适合我所有案例的所有WinAPI功能?即,当它可见时(无论现在是否正确),请告诉我当前窗口尺寸?如果不是,我想我将不得不呼叫GetWindowPlacement(),确定窗口是否最小化。如果为true,请使用正常尺寸,否则请调用GetWindowRect()

2 个答案:

答案 0 :(得分:1)

GetWindowPlacement将填充WINDOWPLACEMENT结构,其中包含最小化和最大化的位置以及窗口的正常位置。

至关重要的是要注意返回的窗口位置是在工作区 - 而不是屏幕 - 坐标,因此应该在接受工作区而不是屏幕坐标的调用中使用。

实际上,这意味着如果用户将任务栏放在屏幕顶部,那么“0,0”对应于任务栏下方的左上角像素。

在最大化时获取窗口的尺寸方面,它们将对应于窗口最大化的监视器的尺寸。在这种情况下,似乎没有单一的API调用可以回答这个问题,因为问题不再有意义:为什么你想要最大化时最大化的尺寸,但最小化时的“正常”尺寸?用户可以将窗口恢复到最大化或正常状态。

答案 1 :(得分:0)

使用IsIconic(hwnd)确定当前窗口句柄的状态:

  1. 如果正常/最大化状态。使用GetWindowRect(hwnd, &rect)获取其尺寸。
  2. 如果最小化状态,则应恢复窗口以获取其尺寸,如"3 & 5 - Restore/Minimize The Window"
  3. 更新 :使用 IsIconic()而不是将rect(左,上)与-32000进行比较,以确定被评论的窗口句柄状态来自@IInspectable和@Raymond Chen。