Domanda

Ho un app WinForms legacy e voglio salvare la posizione e la dimensione della finestra tra le sessioni. Sto usando GetWindowPlacement e < a href = "http://msdn.microsoft.com/en-us/library/ms633544%28VS.85%29.aspx" rel = "nofollow noreferrer"> SetWindowPlacement durante gli eventi FormClosing e carico. Il problema che sto ricevendo è che al più alto impostazioni DPI (ad esempio Medium, formato al 125%), le dimensioni continuano a gonfiare. Chiamerò SetWindowPlacement su di esso con una certa dimensione, ma quando viene chiamato GetWindowPlacement, quei numeri torno più grande del 25%, anche se la finestra è stata la stessa dimensione per tutto il tempo. Lo stesso tipo di problema esiste quando si salva la dimensione di un elemento ridimensionabile all'interno della forma.

Ora questo funziona bene se creo un nuovo progetto WinForms: La soggiorni dimensione stabile anche in presenza del più alto DPI. Sto indovinando c'è qualche impostazione eredità nelle viscere del progetto o una certa regolazione arcana Modulo che è pasticciano in su, ma non riesco a scoprire dove.

Ho chiamato IsProcessDPIAware su entrambi i progetti ed entrambi sono true. Qualcuno sa che cosa potrebbe causare questo?

È stato utile?

Soluzione 2

Ho trovato questa impostazione nel file di offendere Resx del form:

<data name="$this.AutoScaleBaseSize" type="System.Drawing.Size, System.Drawing">
  <value>5, 13</value>
</data>

Quando questo era presente, VS cambierebbe automaticamente l'AutoScaleBaseSize al lavoro per tuoi DPI, ma nessuno degli altri. Per tutti gli altri, la forma sarebbe costantemente crescere o restringersi.

La scelta AutoScaleMode = Carattere nel pannello delle proprietà di design causato VS di calcio e "modernizzare" le impostazioni di scala dei caratteri. Ora funziona per tutti i DPI.

Altri suggerimenti

Sembra che si sta in qualche modo innescare scala, come selezionato dalla proprietà AutoScaleMode del modulo. La differenza tra le due progetti sarebbe la proprietà AutoScaleDimensions, visibile nel file Designer.cs.

Non capisco perché questo causerebbe un problema, ma la classe modulo utilizza già GetWindowPlacement () internamente, RecreateHandleCore () e UpdateWindowState () metodi. Per ottenere aiuto reale, presumo sarà necessario inviare un qualche progetto di Repro.

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