Domanda

Ho un finestra a più livelli creato nella mia applicazione MFC. Ho creato il mio derivazione di CDialog per permettermi di personalizzare le varie parti di come la finestra viene reso. Tutto funziona bene fino a quando comincio preoccuparsi di minimizzare e massimizzare.

Se si fa clic su minimizzare o massimizzare quindi la finestra reagisce esattamente come ci si aspetterebbe (vale a dire esattamente come avviene quando non si utilizza una finestra a più livelli). Tuttavia, quando ho ripristinare la finestra qualcosa di molto strano accade.

Il rettangolo client predefinito per la mia finestra del test è 324x102. Durante il ripristino dallo stato minimizzato, per esempio, il cx e cy passati al OnSize è 994, 550. Se poi fare un GetClientRect (all'interno OnSize) è la dimensione segnalata per la finestra. Stranamente, però se faccio GetWindowRect ottengo il formato corretto di nuovo (anche se ovviamente inclusi tutti i miei aree non client).

Qualcuno ha idea di cosa sta succedendo qui e, cosa più importante, come posso risolvere il problema in modo tale che GetClientRect riporta le informazioni corrette?

Grazie in anticipo!

È stato utile?

Soluzione

Sono venuto su con una sorta di hack per risolvere questo problema. In OnSize e OnMove ignoro (c) x e (c) y che ricevo e lavorare tutto fuori da un GetWindowRect. L'applicazione reagisce ora come previsto. Ho segnato il codice con un [HACK] commento. Questo sembra molto strano, però, mi piacerebbe sentire perché questo sta accadendo.

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