我正试图获得一个顶级水平' HWND的尺寸。即,我想要Firefox / Windows资源管理器/等主要HWND的当前维度。窗口。
如果窗口最小化, GetWindowRect()
将无法工作。 GetWindowPlacement()
适用于大多数情况(包括最小化),但它会返回窗口' SW_SHOWNORMAL
尺寸。因此,如果我将Windows资源管理器调整为100像素乘100像素,请最大化窗口,然后调用GetWindowPlacement()
我将获得100 {100}的SW_SHOWNORMAL
尺寸。我想要最大化的尺寸,即窗口的当前尺寸。
是否有适合我所有案例的所有WinAPI功能?即,当它可见时(无论现在是否正确),请告诉我当前窗口尺寸?如果不是,我想我将不得不呼叫GetWindowPlacement()
,确定窗口是否最小化。如果为true,请使用正常尺寸,否则请调用GetWindowRect()
。
答案 0 :(得分:1)
GetWindowPlacement将填充WINDOWPLACEMENT
结构,其中包含最小化和最大化的位置以及窗口的正常位置。
至关重要的是要注意返回的窗口位置是在工作区 - 而不是屏幕 - 坐标,因此应该在接受工作区而不是屏幕坐标的调用中使用。
实际上,这意味着如果用户将任务栏放在屏幕顶部,那么“0,0”对应于任务栏下方的左上角像素。
在最大化时获取窗口的尺寸方面,它们将对应于窗口最大化的监视器的尺寸。在这种情况下,似乎没有单一的API调用可以回答这个问题,因为问题不再有意义:为什么你想要最大化时最大化的尺寸,但最小化时的“正常”尺寸?用户可以将窗口恢复到最大化或正常状态。
答案 1 :(得分:0)
使用IsIconic(hwnd)确定当前窗口句柄的状态:
更新 :使用 IsIconic()而不是将rect(左,上)与-32000进行比较,以确定被评论的窗口句柄状态来自@IInspectable和@Raymond Chen。