2011-09-26 13 views

risposta

40

La finestra rect include l'area non client, vale a dire i bordi della finestra, la barra dei sottotitoli, ecc. Il client rect no.

GetWindowRect restituisce un rettangolo nelle coordinate dello schermo mentre GetClientRect restituisce un rettangolo nelle coordinate del client.

InvalidateRect riceve un rect nelle coordinate del client. Se si desidera invalidare l'intera area client, passare NULL a InvalidateRect. È possibile passare il valore restituito da GetClientRect, ma è molto più semplice e più chiaro passare NULL.

6

Da MSDN:
GetWindowRect
recupera la dimensione del rettangolo della finestra specificata. Le dimensioni sono date in coordinate dello schermo relative all'angolo in alto a sinistra dello schermo.

GetClientRect
Recupera le coordinate dell'area client di una finestra. Le coordinate del client specificano gli angoli superiore sinistro e inferiore destro dell'area client. Poiché le coordinate del client sono relative all'angolo superiore sinistro dell'area client di una finestra, le coordinate dell'angolo in alto a sinistra sono (0,0).

Più: cliente rect non include barra del titolo, i confini, le barre di scorrimento, barra di stato ...

+0

Grazie per il punto relativo alle coordinate relative restituite da GetClientRect(). – rpattabi

+1

Nota importante sulle barre di scorrimento – BlackBada

11

GetClientRect ottiene le coordinate dell'area client della finestra. In particolare questa è la zona all'interno finestra di Chrome e esclude l'intestazione ecc Uno dei commenti su the MSDN page riassume abbastanza bene:

direi che questa dimensione funzione di ritorno della zona che ho può rendere a.

GetWindowsRect ottiene le coordinate di tutta la finestra. Questo include l'intestazione, barra di stato ecc, tuttavia in base a un commento su the MSDN page

applicazioni in Vista che non sono collegati con WINVER = 6 riceveranno un set di valori fuorviante qui, che non tiene conto della imbottitura extra di pixel "di vetro" Vista Aero si applica alla finestra.

Quindi, a meno che non sia stato corretto per Windows 7, ricontrolla il risultato ottenuto e assicurati di avere il valore corretto di WINVER.

9

Una spiegazione molto semplice è che GetWindowRect() fornisce il rettangolo che include i bordi della finestra. GetClientRect() ti dà il rettangolo che esclude i bordi - l'area che è assegnata al disegno specifico della finestra.

Si prega di notare che GetWindowRect() restituisce un rettangolo nelle coordinate dello schermo - le coordinate relative allo schermo/monitor. GetClientRect() restituisce un rettangolo relativo a se stesso.