Modaliteti Hi-DPI në Explorer: Zgjidhje nëse nuk mund ta ndryshoni

  • Kuptoni modalitetet e ndërgjegjësimit për DPI dhe si ato ndikojnë në mprehtësi dhe shkallëzim.
  • Përditësoni aplikacionet në versionin 2 për monitor dhe testoni WM_DPICHANGED me paraqitje që i përshtaten nevojave të përdoruesit.
  • Përdorni përputhshmërinë/mbivendosjen e shkallëzimit dhe manifestin aty ku është e përshtatshme.
  • Aktivizon HiDPI në WorkSpaces dhe macOS (SwitchResX) kur sistemi nuk ofron opsionin ideal.

eksplorues me dpi të lartë

Kombinimi i ekraneve me dendësi të lartë dhe aplikacioneve klasike të desktopit ka çuar në një ortek pyetjesh: pse Explorer është i turbullt, si ta aktivizoni Modaliteti Hi-DPI tek klientët në distancë, çfarë Trokit te Cilësimet në Windows (rregullo DPI, shkallëzimin dhe rezolucionin në Windows 11), macOS ose Linux, dhe çfarë duhet të bëjnë zhvilluesit për të siguruar që aplikacionet e tyre të shkallëzohen dhe të mbeten të përgjegjshme. Ky artikull bashkon gjithçka që ju nevojitet për të kuptuar dhe zgjidhur problemin, nga më praktiket deri te më tekniket.

Nëse po kërkoni se si të merreni me dritare të turbullta, menu të vogla në një monitor 4K ose si të detyroni shkallëzimin e saktë në monitorë ultra i gjerë 2560×1080 (për shembull, si zgjidhni rezolucionin manualisht), keni ardhur në vendin e duhur. Përveç zgjidhjeve për përdoruesit, do të zbuloni se çfarë Ndërgjegjësimi për PPP/DPI (për monitor, v1 dhe v2), këshilla për manifestin dhe përputhshmërinë, si dhe udhëzime specifike për përditësimin e aplikacioneve Win32, Windows Forms ose WPF.

Çfarë është Hi-DPI dhe pse disa aplikacione duken të paqarta?

Ekranet moderne përqendrohen shumë më tepër piksel për inç (ppi/dpi) sesa disa vite më parë (nga 96 DPI tradicionale në 300 DPI e më shumë). Kur një aplikacion nuk mund të përshtatet me këtë rritje, Windows përfundon duke zgjeruar ndërfaqen e tij me bitmap, gjë që shkakton tipiken efekt turbullimi kur shkallëzohet; në Windows 11 ka edhe veçori si Super Rezolucion Automatik që përpiqen të përmirësojnë pamjen.

Në terminologjinë e Microsoft-it, një aplikacion mund të jetë i pavetëdijshëm, i vetëdijshëm për sistemin ose i vetëdijshëm për çdo monitor. Çdo profil përcakton nëse sistemi shkallëzohet automatikisht ose nëse duhet të rivizatohet me faktorin e ri të shkallëzimit. Sa më e lartë të jetë ndjeshmëria e DPI-së, aq më i mprehtë do të jetë rezultati kur zhvendoset dritarja midis monitorëve me shkallëzime të ndryshme.

hi-dpi

Rasti i File Explorer dhe aplikacioneve të sistemit të paqartë

Shumë përdorues hasin se skeda në C:\Windows\explorer.exe nuk shfaqet. pajtueshmëriEksploruesi është një komponent sistemi i trajtuar posaçërisht, kështu që nuk do ta shihni panelin e zakonshëm "Mbivendos sjelljen e shkallëzimit DPI" atje. Nëse shihni një Eksplorues ose Panel Kontrolli të turbullt, problemi zakonisht qëndron te shkallëzimi i sistemit (shih si ndryshoni dhe rregulloni rezolucionin e ekranit) në pjesët e papërshtatura të ndërfaqes.

Për t'u marrë me aplikacionet e turbullta në përgjithësi, Windows 10/11 ofron opsione si "Lëreni Windows të përpiqet të rregullojë aplikacionet në mënyrë që ato të mos jenë të turbullta" dhe mbivendosje të shkallëzimit për aplikacion. Ndërsa eksplorues Nëse nuk ka një skedë përputhshmërie, këto veçori të sistemit mund të përmirësojnë sjelljen e përgjithshme, ndërsa për aplikacione të tjera mund të aplikoni mbishkrime specifike të shkallëzimit nga vetitë e tyre.

Modalitetet e ndërgjegjësimit DPI në Windows

Në ekosistemin e Windows, ekziston një klasifikim i qartë se si një aplikacion e trajton shkallëzimin. Të kuptuarit e kësaj është çelësi për të diagnostikuar pse një dritare duket qartë në një monitor, por i turbullt në një tjetër me një faktor shkalle të ndryshëm.

Shfaqje nga Si e sheh PPP-ja këtë Sjellja gjatë ndryshimit të DPI-së
Jo i vetëdijshëm N / A Gjithmonë 96 PPP (100%) Shkallëzimi i bitmapit (i turbullt)
I vetëdijshëm për sistemin Windows Vista Një DPI e vetme: ajo e monitorit kryesor kur hyni në sistem Duket qartë vetëm në atë DPI; nëse ndryshoni monitorët/shkallëzimet, Windows zmadho bitmapin (i turbullt)
Për monitor (v1) Dritaret 8.1 DPI e monitorit ku ndodhet kryesisht dritarja HWND i nivelit të lartë merr WM_DPICHANGED; nuk ka shkallëzim automatik të elementëve të ndërfaqes së përdoruesit
Për monitor v2 Windows 10 1703 DPI e monitorit aktiv për dritare HWND-të e nivelit të lartë dhe sekondarë marrin njoftim; Windows shkallëzon zonën jo-klient, dialogë dhe tema nga comctl32 V6 automatikisht

Në versionin 2 për monitor, aplikacioni nuk përshkallëzohet kurrë nga sistemi dhe duhet ndryshim madhësie/rivizatim përmbajtja e tij pas WM_DPICHANGED. Në këmbim, Windows ju kursen punën në jo-klient (titulli, shiritat e lëvizjes), dialogët e Win32 dhe kontrolle të caktuara me "tema".

Përditësoni një aplikacion ekzistues për ta bërë atë të qartë

Hapi minimal është të shënoni procesin si për monitor v2 (manifest ose API) dhe zhvendosni logjikën e paraqitjes nga inicializimi në mënyrë që të funksionojë edhe kur ndryshon DPI (WM_DPICHANGED). Në të njëjtën kohë, duhet të rishikojmë supozimet tona: të ndalojmë ruajtjen e përjetshme në memorien e përkohshme të madhësive të shkronjave dhe vlerave që varen nga DPI; rillogarit kur ndryshon shkalla.

Shumë API të Win32 nuk e ekspozojnë kontekstin DPI, kështu që ato kthejnë vlera në lidhje me DPI-në e sistemit. Këshillohet që thirrjet klasike të zëvendësohen me variante të vetëdijshme për DPI-në, për shembull, duke përdorur GetSystemMetricsForDpi në vend të GetSystemMetrics dhe aplikoni veçori si EnableNonClientDpiScaling në WM_NCCREATE.

Modaliteti i përzier: I vetëdijshëm për DPI për fije

Nëse aplikacioni juaj është i madh ose përfshin ndërfaqe përdoruesi të palëve të treta, mund të ndiqni një qasje me faza: përditësoni dritaren kryesore në për monitor dhe lini dritaret dytësore të nivelit të lartë në modalitetin e tyre origjinal. Kjo është arsyeja pse ekziston SetThreadDpiAwarenessContext, i cili e lidh ndërgjegjësimin për DPI me dritaret e krijuara ndërsa ai kontekst është aktiv.

Kini parasysh se mënyrat e përzierjes rrisin kompleksitetin dhe ka rregulla që Windows nuk lejon t'i thyejë (për shembull, një pemë HWND nuk mund të përziejë vetëdije të ndryshme midis prindit dhe fëmijës). Nëse devijoni nga rregulli, sistemi mund të detyrojë një rivendos modalitetin DPI të procesit ose kthen gabime si ERROR_INVALID_STATE gjatë riprindërimit.

Testet thelbësore dhe problemet e zakonshme

Provoni të zhvendosni dritaret midis monitorëve me shkallë të ndryshme, duke filluar në secilin monitor, duke ndryshuar faktorin e shkallës menjëherë dhe pastaj pasi të keni ndryshuar monitorin kryesor, dil dhe kyçu përsëri për të zbuluar ruajtjen në memorje DPI/madhësi. Shton grupe testimi të Desktopit në distancë nga kompjuterët me DPI të lartë/të ulët.

Probleme tipike: mospërdorimi i drejtkëndëshit të sugjeruar WM_DPICHANGED; virtualizimi i vlerave kur fija nuk është në Konteksti i DPI-së saktë; dhe API-të pa kontekst DPI që ju detyrojnë të ngarkoni burimet manualisht (p.sh., duke zëvendësuar LoadIcon me LoadImage për madhësi të përshtatshme).

SSMS në ekranet 4K: manifest i jashtëm dhe mbivendosje e shkallëzimit

SQL Server Management Studio (SSMS) është përmirësuar, por për njëfarë kohe mbështetet për DPI e Lartë Ishte e pjesshme. Ekzistojnë dy mënyra efektive: përdorimi i një manifesti të jashtëm dhe mbivendosja e shkallëzimit në Compatibility.

Manifesti i Jashtëm: Krijon çelësin e regjistrit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide me PreferExternalManifest=1 (DWORD). Shtoni një skedar ssms.exe.manifest (UTF‑8) së bashku me ssms.exe për të treguar ndërgjegjësimin për DPI. Rinisni dhe do të shihni ikona dhe tekst më të qartë në UHD 3840×2160.

Mbivendosja e Shkallëzimit: Në shkurtoren SSMS, skeda Compatibility, zgjidhni "Anulo sjelljen e shkallëzimit me DPI të lartë” dhe zgjidhni “Aplikacioni”. Kjo e detyron SSMS-në të sillet si një monitor për secilin, duke e penguar Windows-in ta zmadhojë atë me bitmap kur ndryshon DPI.

Për të audituar ndërgjegjësimin DPI të çdo procesi, Process Explorer (Sysinternals) ju lejon të shtoni një kolonë "Ndërgjegjësimi DPI". Do të shihni statuse të tilla si I Panjohur (gjithmonë i shkallëzuar sipas sistemit), I vetëdijshëm për sistemin ose për çdo monitor. Ky kontroll është shumë i dobishëm për të kuptuar se çfarë të prisni nga një aplikacion specifik.

Virtualizimi i Koordinuar dhe API-të pa kontekst të DPI-së

Kur një aplikacion ose fije funksionon si e pavetëdijshme ose e vetëdijshme për sistemin, Windows mund të virtualizojë vlerat (p.sh., madhësitë e ekranit) për të "simuluar" 96 DPI, gjë që ngatërron diagnostikimin. Sigurohuni që fija funksionon në të njëjtën mënyrë. Konteksti i DPI-së pritet kur kërkohen metrika ose krijohen dritare, dhe rikthen kontekstin pas përdorimit të SetThreadDpiAwarenessContext.

Shumë API klasike nuk përfshijnë HWND/DPI në nënshkrimin e tyre. Shembuj: kur ngarkoni ikonat, përdorni Ngarko Imazhin në vend të LoadIcon; për metrika përdorni GetSystemMetricsForDpi; për jo-klient, EnableNonClientDpiScaling. Këto lloje cilësimesh bëjnë diferencën midis një ndërfaqeje të pastër dhe një ndërfaqeje që sistemi thjesht fiket. shkallëzim sipas bitmap-it.

Një shënim i rëndësishëm: «hidpi.h» nuk është Hi-DPI

Ekziston një rutinë HID (Pajisja Ndërfaqësore Njerëzore) e quajtur HidP_UsageListDifference koka e të cilit është hidpi.h, gjë që çon në konfuzion me "Hi-DPI". Ky API nuk ka të bëjë fare me shkallëzimin e ekranit: përdoret për të krahasuar Listat e përdorimit të HID (butona/inpute) dhe merrni ndryshimet midis gjendjeve të mëparshme dhe aktuale.

Nënshkrimi i tij kthen HIDP_STATUS_SUCCESS dhe përdor buffer-at PreviousUsageList dhe CurrentUsageList, duke depozituar përdorimet që zhduken në Lista e Përdorimit të Ndërprerjes dhe ato që shfaqen në MakeUsageList. Një zero në një listë interpretohet si një ndarës. Për kontekst, kjo i përket fshehėn (tastiera, gamepad-e), jo në botën e ekraneve Hi-DPI.

Diagnostikim i shpejtë me Process Explorer

Nëse nuk jeni i sigurt se si shkallëzohet një aplikacion, shtoni kolonën "Njohuria DPI" në Process Explorer. Do të shihni statuse si I Panjohur (sistemi gjithmonë shkallë), i vetëdijshëm për sistemin (merr DPI fillestare dhe nuk reagon ndaj ndryshimeve), ose për monitor. Ky kontroll është i dobishëm për të vendosur nëse keni nevojë për manifest, anulimi i shkallëzimit ose rifaktorizim i paraqitjes.

Zotërimi i Hi-DPI do të thotë kombinimi i ndryshimeve të sistemit (dhe opsioneve të përputhshmërisë) me praktikat e mira të zhvillimit. Me atë që kemi trajtuar këtu, mund të ndaloni së shikuari ndërfaqe të paqarta, të rregulloni monitorët ultra të gjerë në macOS me rezolucione të vërteta HiDPI, të aktivizoni modalitetin me dendësi të lartë në Hapësirat e punës dhe, nëse jeni zhvillues, migroni aplikacionin tuaj në versionin 2 për monitor me një plan të qartë: përgjigjuni WM_DPICHANGED, përdorni metrika "për DPI" dhe mbështetuni në modalitetin e përzier kur është e nevojshme.

Artikulli i lidhur:
Si të ndryshoni rezolucionin e ekranit në Windows 10