Ho un programma creato in VS2008 con MFC. Ora l'ho modificato per renderlo "Per Monitor DPI-Aware", ed è quasi finito. Ho modificato il manifest e gestito il messaggio WM_DPICHANGE. Ma c'è ancora un problema:Crea finestre di dialogo comuni "Per monitor DPI-aware"
ho usato CFileDialog classe per mostrare aprire/salvare le finestre di dialogo, e utilizzati SHBrowseForFolder funzione per mostrare finestra di selezione delle cartelle. Ma tutte queste finestre di dialogo sono NOT "Per monitor DPI-Aware", non modificheranno l'interfaccia utente quando le sposti tra monitor con impostazioni DPI diverse.
Io uso spy ++ per monitorare i messaggi di queste finestre di dialogo, trovo che possono ricevere il messaggio WM_DPICHANGED ma semplicemente non lo gestiscono.
E ho provato la finestra di dialogo del file aperto in notepad.exe su Windows 10, ha funzionato perfettamente.
Qualcuno sa come posso rendere queste finestre di dialogo "Per Monitor DPI-Aware"?
-------- -------- EDIT
Ci sono altri due problemi:
- Quando sposto una finestra su un monitor con diversa DPI, la finestra si ridimensiona, ma l'altezza della barra del titolo e la dimensione del font del titolo non vengono cambiate.
- La casella di controllo controlla la dimensione della casella non è stata modificata.
Ritengo che questi problemi possano avere qualche tipo di connessioni, ma non riesco a capirlo.
-------- triste notizia --------
ho compilato "DPI Tutorial campione" di Microsoft con VS2013, e ha lo stesso problema.
https://code.msdn.microsoft.com/DPI-Tutorial-sample-64134744
Beh, di solito non lo faresti. Quelle finestre di dialogo che stai usando sono obsolete. Per Apri/Salva/Sfoglia per cartella, ora si utilizzerà il [Common Item Dialog] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb776913%28v=vs.85%29. aspx? f = 255 & MSPPError = -2147217396), in particolare 'IFileOpenDialog'. Questi sono disponibili su Windows Vista e successivi e dovrebbero essere già a conoscenza DPI. Tornare alle vecchie finestre di dialogo su sistemi operativi di livello inferiore. –
BTW da VS2012 (o VS2010 non proprio sicuro), CFileDialog utilizza automaticamente la finestra di dialogo Common Item senza alcun lavoro aggiuntivo. –
@Cody Gray Ho controllato il codice in "mfc \ dlgfile.cpp", e ho trovato che CFileDialog calss ha usato IFileDialog per mostrare la finestra di dialogo. 'if (m_bVistaStyle == TRUE) { ApplyOFNToShellDialog(); HRESULT hr = (static_cast (m_pIFileDialog)) -> Mostra (m_ofn.hwndOwner); nResult = (hr == S_OK)? IDOK: IDCANCEL; } ' –