Come ottenere larghezza e altezza dalla finestra CreateWindowEx ()? C ++
Domanda
Ho creato una finestra con la funzione CreateWindowEx (), ora come posso ottenere la larghezza e l'altezza da quella finestra che ho creato? Sembra una cosa molto semplice da fare, ma non sono riuscito a trovare alcuna risposta; _;
Ciò è necessario perché l'altezza della finestra viene creata automaticamente a seconda di come Windows vuole crearla.
Lingua C o C ++
Soluzione
Usa GetWindowRect . Sottrarre la destra da sinistra per ottenere la larghezza e il fondo dall'alto per ottenere l'altezza.
RECT rect;
if(GetWindowRect(hwnd, &rect))
{
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
}
Come nota a margine, se desideri l'area client anziché l'intera finestra. Puoi utilizzare GetClientRect . Per altre informazioni sulla finestra è possibile utilizzare GetWindowInfo .
Altri suggerimenti
Hai provato GetWindowRect ()
o GetWindowInfo ( )
che restituisce un < codice> WINDOWINFO struttura?
Credo che tu stia cercando GetWindowInfo
Esempio:
HWND window = ::CreateWindowEx(...);
WINDOWINFO info;
if ( ::GetWindowInfo(window, &info) ) {
...
}
Dato che non vi è alcuna indicazione del motivo per cui è necessaria la dimensione e che la dimensione può cambiare se lo stile della finestra è impostato per includere attributi ridimensionabili [e l'utente ridimensiona la finestra utilizzando minimizza / massimizza / ripristina o trascina un bordo della finestra], il la scelta più sicura è quella di includere un gestore messaggi per WM_SIZE e usare i valori dei parametri wparam e lparam per determinare le dimensioni della finestra. In questo modo, saprai sempre le dimensioni correnti. WM_SIZE viene chiamato nella sequenza della creazione della finestra di post dei messaggi.