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 ++

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top