2018幎ã¯å¹Žãªã®ã§ãã¢ããªã±ãŒã·ã§ã³ã ããæžãã®ã¯ã©ããããããããŸãè¯ããããŸããã æ代ã®ãã¬ã³ãã«åãããŠã¿ãŸããã-ã€ã³ã¹ããŒã©ãŒã¯Hi DPIã¢ãŒãããµããŒãããŸãã ã©ãããããã§ãããã¹ã¯ãããã¯ãã¡ããã®ããšã4Kã¹ã¯ãªãŒã³ãçãããããŸããã ããŠãã€ã³ã¹ããŒã©ãŒã¯ããã«èµ·åããã¯ãã®ãã®ãªã®ã§ãç§ãã¡ã«ãšã£ãŠæ¬åœã«é£ãããªãããšãç¯çŽããŸãã ããŠãè¿œå ã®ã©ã€ãã©ãªãªãã§ãã¯ã¿ãŒã°ã©ãã£ãã¯ã¹ã䜿çšããããã«ããŒããè©Šã¿ãŸããã-çŸããããŽãå¿ èŠã§ãïŒ
ãŸããé«DPIãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã®äœææ¹æ³ã«é¢ããMicrosoftã®ææ°ïŒä»æ¥ïŒã®ã¬ã€ãã§ãã ããã¯ãWindowsã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªDPIã®ãµããŒãã¢ãŒãã®é£æ床ã瀺ããŠããŸãã ãããŠããã§ã«ããã€ã®ç°ãªãæ©èœãè¿œå ãããŠããã®ã... Windows 10ããåã¯ãã·ã¹ãã ã¯DPIã«åŸã£ãŠãã©ã³ããæç»ããããšããã§ããŸããã§ããããåæã«ãã€ã³ãã³ãããã®ä»ã®ãµã€ãºã¯ã²ã©ãããããŒãã£ã³ã°ãã§ãä»ã¯ãã¹ãŠåŒã䌞ã°ãããŠããŸããã ãã®ã¢ãŒãã¯ãXPã¹ã¿ã€ã«ã®DPIã¹ã±ãŒãªã³ã°ãšåŒã°ããŸãã Vistaããã¯ãã·ã¹ãã ãã¢ããªã±ãŒã·ã§ã³ããããã¡ãŒã«åŒã蟌ã¿ãæçµçãªç»åãåŒã䌞ã°ããŸããããçµæããŸããŸãã§ããã¹ãŠããŒãããŠããŸããã Windows 8.1以éãã·ã¹ãã ã¯DPIã®å€æŽã«é¢ããã¡ãã»ãŒãžããã®å Žã§éä¿¡ãå§ããŸããããã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ãŠã£ã³ããŠã®ã¿ã«éä¿¡ãããŸããã DPIã®å€æŽã確èªããããã«ãŠãŒã¶ãŒã»ãã·ã§ã³ãéããå¿ èŠã¯ãããŸããã ãããŠãWindows 10ã§ã®ã¿ãã·ã¹ãã ã¯GDIïŒããã¹ãããã³å ±éã³ã³ãããŒã«ïŒãä»ããŠè¡ããããã¹ãŠãåæç»ããããšãåŠã³ãããã«ã§ã¯ãªããCreators Updateã®åŸãWindows 10ã§ããã¹ãŠãè¡ãããšã¯ã§ããŸããïŒ
ãããã£ãŠãDPI察å¿ã¢ããªã±ãŒã·ã§ã³ãäœæããå Žåã¯ãããã¥ã¡ã³ãã«åŸã£ãŠUWPãå®è¡ããå¿ èŠããããŸãããã®ãã¬ãŒã ã¯ãŒã¯ã®ã¿ãDPIããµããŒããããã¹ãŠãè¡ããŸãã ãã以å€ã¯ãã¹ãŠãäœããã®åœ¢ã§ã®æåå¶åŸ¡ãå¿ èŠã«ãªããŸãã
å®éãããã¯å®éã«ã¯å¿ èŠãããŸããããã¹ãŠãèªåã§æããŸãã æåã«ãçŸåšã®DPIãååŸããã·ã¹ãã ããã®ã¡ãã»ãŒãžããªãã¹ã³ããŸã-DPIããªã³ã¶ãã©ã€ã§å€æŽããŸãïŒã·ã¹ãã ããµããŒãããŠããå ŽåïŒã 次ã«ãå¿ èŠã«å¿ããŠåçŽã«ãŠã£ã³ããŠ/ã³ã³ããŒãã³ããæç»ããDPIãèæ ®ããŠãããã°ã©ã ã®å®è¡äžã«ãŠãŒã¶ãŒãDPIãå€æŽããããDPIãç°ãªãå¥ã®ã¢ãã¿ãŒã«ãŠã£ã³ããŠããã©ãã°ããå Žåã¯æŽæ°ããŸãã ã³ã¢ã³ã³ã³ãããŒã«ã䜿çšããããšã¯ã§ããŸãããWindows10 1703ããåã®DPIã®å€æŽã«å¯Ÿå¿ããããšã¯ã§ããŸããããèªèº«ã§è¡ã£ãŠãã ããã
ã©ãããŒã¯ãã¹ãŠã®ã³ã³ããŒãã³ãïŒãŠã£ã³ããŠãšã³ã³ãããŒã«ïŒåãã«äœæãããŠããããããŠã£ã³ããŠããã·ãŒãžã£ããCãã¹ã¿ã€ã«ã§äœæããã®ã¯å¥œãŸãããããŸããã ããã§ã¯ããŒãããã§ãå€ãã®äœæ¥ã¯ãããŸããïŒæ¢ã«ãã¹ãŠãäºåã«ç¥ã£ãŠããå ŽåïŒããããŠããã¹ãŠã®WINAPIããã°ã©ããŒã¯ãã¹ãã¬ãŒãžã«åããããªãã®ãé·ãæã£ãŠããŸãã å¿ èŠãªãã®ïŒ
- Windowsåãã®æœè±¡çãªãã®ïŒWindowsïŒ
- ã³ã³ãããŒã«ã®æœè±¡çãªãã®
- ããã¹ãèŠçŽ ïŒããã¹ãããã¯ã¹ïŒ
- ãã¿ã³ããã¹ããšãšãã§ã¯ãïŒãã¿ã³ïŒ
- é²æã€ã³ãžã±ãŒã¿
- ãªã³ã¯
- èšå®ãéžæããããã®ããã¹ãä»ãã®ãã©ã°ïŒãã§ãã¯ããã¯ã¹ïŒ
- ãã¯ãã«ã®ããŽã®ããªãããŒãªèŠçŽ ã
- ããŠããã©ã¹ãããã®ç°ãªãçµã¿åãã
WINAPIã§ã¯ããŠã£ã³ããŠãšã³ã³ãããŒã«ïŒããããŠã£ã³ããŠã§ãïŒã®æäœã®çè«å šäœãäŒããããšã¯é©åã§ã¯ãããŸããã ã€ãŸãã次ã®ãããªãã®ã§ããGUIèŠçŽ ãäœæããããšãã·ã¹ãã ã¯ãã®ãã³ãã«ïŒHWNDïŒãè¿ããäœæãããèŠçŽ ã®ããŒã¿ãæããŸãã èŠçŽ ãšãŠã£ã³ããŠã«ã¯ã¡ã€ã³ããã·ãŒãžã£ããããŸã-èŠçŽ ãžã®åŒã³åºãã解æããèŠçŽ ããã®èŠæ±ãå®è¡ããŸãïŒãŸãã¯å®è¡ããŸããïŒã èŠçŽ ã¯ãã¡ãã»ãŒãžïŒã¡ãã»ãŒãžèªäœãšãã®2ã€ã®ãã©ã¡ãŒã¿ãŒïŒwparamããã³lparamïŒãä»ããŠã¢ã¯ã»ã¹ãããŸãã äœããããçŽãããã«ãã¡ã€ã³ããã·ãŒãžã£ãç¬èªã«åå®çŸ©ããå¿ èŠãªã¡ãã»ãŒãžãåŠçããã¡ã€ã³ããã·ãŒãžã£ãå¶åŸ¡ããŠãããã«äœããå解ããå¿ èŠãããããšãéç¥ãããããã§ã«ãã¹ãŠãè¡ã£ãŠããŸãã ä»ã®ã·ã¹ãã ã§ã¯ãGUIã¯ã»ãŒåãã§ã-è€éãªãã®ã¯ãããŸããã
ããŠãããªãã¯WINAPIããã°ã©ãã§ãã ã»ãŒã
æçµçã«è¡ãã®ã¯ã¡ã€ã³ãŠã£ã³ããŠã§ããããã§ã¯ãããã€ãã®ãã¿ã³ãæŒããŠããã€ãã®ãªãã·ã§ã³ãéžæã§ããŸãã [ã€ã³ã¹ããŒã«]ãã¿ã³ãã¯ãªãã¯ãããšãèæ¯ããŒããããã¡ãã·ã§ããã«ãªé²è¡ç¶æ³ã€ã³ãžã±ãŒã¿ãŒã衚瀺ãããŸããããã¯ãWindows XPããåäœããŸãã ãã€ã¢ãã°ããã¯ã¹ãåºç€ãšããŠã¿ãŸããã-ãããæãç°¡åãªæ¹æ³ã§ãã
ã§ã¯ãé çªã«èŠãŠã¿ãŸããããHiDPIã«ã€ããŠã¯ã©ãã§ããããã Windowsèªäœã¯ãã¢ããªã±ãŒã·ã§ã³ãããã§ã¹ãã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ããDPIãµããŒãïŒdpi察å¿ïŒãå®çŸ©ããŸããããã¯ããã°ããã®éå®è³ªçã«å¿ é ã§ããã ããšãã°ãWindows c 8.1ã®DPIã«å ããŠãGetVersioné¢æ°ãå€æŽãããŸãã -ãããã§ã¹ãã§ãµããŒãããã·ã¹ãã ã瀺ãããŠããªãå ŽåãGetVersionã¯6.2ïŒWindows 8ããå€ããã¹ãŠã®ã·ã¹ãã ã§Windows 8ã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠãããã®ããã«ïŒãŸãã¯ãªã¹ãããæãé©åãªãã®ãè¿ããŸãè¿œå ããã·ã¹ãã ã ãããã£ãŠããããã§ã¹ãã¯å€ãã®çç±ã§å¿ èŠã§ãã ãããã§ã¹ãã®äŸã¯ããã§èŠã€ããããšãã§ã ããã¹ãŠã®å¯èœãªãããã§ã¹ããªãã·ã§ã³ã¯ããã«ãªã¹ããããŠããŸã ã
ã¢ããªã±ãŒã·ã§ã³ã«ã¯ãDPIãæäœããããã®4ã€ã®ãªãã·ã§ã³ããããŸãã
- DPI Unaware - DPIã«ã€ããŠäœãç¥ããŸããïŒãã¹ãŠã¯ã·ã¹ãã ã«ãã£ãŠè¡ãããŸãããã©ã®ããã«è¡ããããïŒ
- ã·ã¹ãã DPIèªè - ã·ã¹ãã DPIãååŸããæåã«ã¢ããªã±ãŒã·ã§ã³ãåæåããŸãïŒWidows VistaïŒ
- ã¢ãã¿ãŒããš -ã·ã¹ãã ã®DPIã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã衚瀺ãããã¢ãã¿ãŒã®DPIãååŸããŸãã ãŠãŒã¶ãŒãç°ãªãDPIã®ç°ãªãã¢ãã¿ãŒéã§ã¢ããªã±ãŒã·ã§ã³ããã©ãã°ãããšãã«ã¡ãã»ãŒãžãåŠçããŸããããããã¯ãããã¬ãã«ãŠã£ã³ããŠã«ã®ã¿è¡šç€ºãããŸãïŒWidows 8.1ïŒ
- ã¢ãã¿ãŒããšïŒV2ïŒã¯ã¢ãã¿ãŒããšãšåãã§ãããã·ã¹ãã ã¯ãã¹ãŠã®ãŠã£ã³ããŠã«ã¡ãã»ãŒãžãéä¿¡ããŸãã ããã«ãã·ã¹ãã èªäœã¯ããŠã£ã³ããŠã®éã¯ã©ã€ã¢ã³ãéšåã®ãµã€ãºãå ±éã³ã³ãããŒã«ãããã³CreateDialogïŒCreators Updateãã«ã1703以éã®Windows 10ïŒã§äœæããããã€ã¢ãã°ããã¯ã¹ã®åæãµã€ãºã調æŽããŸãã
æåŸã®3ã€ã®ã¢ãŒãã§ã¯ãã·ã¹ãã ã¯ïŒã»ãšãã©ïŒã¢ããªã±ãŒã·ã§ã³ãããæãé¢ãããäœã«ã觊ãããä»®æ³åããã«ãã¹ãŠã®åº§æšãšãµã€ãºããã¯ã»ã«åäœã§æäŸããŸãã ãã¡ãããäžèšã®ç¹ãé€ããŸãã Per-Monitorã¢ãŒãã¯ç§ãã¡ã«ãšã£ãŠæé©ã§ãããPer-Monitor V2ã®æ©èœã¯å¹²æžããã ãã§ãã
ããããããã¯ãã¡ããåé¡ããªãããã§ã¯ãããŸããã Visual Studioã®ãã¶ã€ããŒã§ãã€ã¢ãã°ããã¯ã¹ãäœæããã®ã奜ããªã®ã§ãæ·±å»ãªåé¡ãçºçããŸãã ãã€ã¯ããœããèªäœã¯ã察話åã¢ããªã±ãŒã·ã§ã³ãæåã§äœæãããã¹ãŠã®èŠçŽ ãæåã§ãŠã£ã³ããŠã«è¿œå ããããšãæäŸããŠããŸã -ç³ãèš³ãããŸããããããã賌èªããŠããŸããã åé¡ã¯ããªãœãŒã¹ïŒãã€ã¢ãã°ãã³ãã¬ãŒãïŒã®ãã€ã¢ãã°ããã¯ã¹ãµã€ãºãDLUïŒDIALOG UNITSïŒã«ä¿åãããããšã§ãã ãŸããçŸåšã®DLUå€ã¯ãã·ã¹ãã ã®DPIã«å¿ããŠå€ãããŸãã DPIãšDIALOG UNITSãäºãã«éããããŠããããšãããããŸãã ããã«ãDPIãšã¯ç°ãªãããªã³ã¶ãã©ã€ã§ïŒDIALOG UNITSïŒã¯å€æŽããããDPIãå€æŽããåŸã¯ãæ°ããã»ãã·ã§ã³ã§ã®ã¿æ©èœããŸãã ããã ãã§ãªãã GetDialogBaseUnitsïŒïŒé¢æ°ã䜿çšããŠå€æŽãã«ãŠã³ãããããšãããšããµã€ãºã¯å€åããŸãã å®éã®ãŠã£ã³ããŠãµã€ãºã®èšç®ã¯ã ãã®ã¡ãã»ãŒãžãéæ¥çã«ç¢ºèªããããã€ãã®ä»ã®ãã©ã¡ãŒã¿ãŒã«äŸåããŠããããšãããããŸã ã ã€ãŸããã¢ããªã±ãŒã·ã§ã³ã®éå§æã«åæã®æ£ãããµã€ãºã瀺ãããšã¯ã§ããŸããã ãã€ã¢ãã°ãã¶ã€ããæåŠããããªãã®ã§ããŠã£ã³ããŠã®åæãµã€ãºãšãŠã£ã³ããŠå ã®èŠçŽ ãåžžã«ãããã96 DPIã§ãããã®ããã«ç€ºãã³ãŒãã衚瀺ãããDPIã«å¿ããŠå€æŽããŸãã ãã€ã¢ãã°ãšãã®èŠçŽ ã®ãªãœãŒã¹ã«ã€ããŠèª¬æããå¿ èŠããããŸããã ããã«ããŠã£ã³ããŠ/èŠçŽ ã®ãµã€ãºã¯ããã©ã«ãã§DLUã§ä¹ç®ãããåæåãŠã£ã³ããŠã¯ãã®åœ¢åŒã«çž®å°ãããŸãã
ããããä»ã§ã¯ãã¹ãŠãåçŽã§ã-ãŠã£ã³ããŠã®ãµã€ãºãšéå§æã«èŠçŽ ã調æŽããåŸãããã©ã«ãã®DPIïŒ96ïŒã䜿çšããŠããŠã£ã³ããŠã®çŸåšã®DPIã®ãŠã£ã³ããŠãµã€ãºã®åæåãè¡ãããŠã£ã³ããŠå ã®ãã¹ãŠã®åã«å¯ŸããŠãè¡ããŸãã ããã¯1ã¹ãããã§å®è¡ã§ããŸããã2ã€æ®ããŸããã ãããŠãããã§äœãèµ·ãã£ãŠããã®ãã¯ãŸã£ããæ確ã§ã¯ãããŸããã
ãã ããã¡ãã»ãŒãžWM_DPICHANGEDããŠã£ã³ããŠã«å°çãããšãæåã®ãã©ã¡ãŒã¿ãŒã¯æ°ããDPIã«ãªãã2çªç®ã¯ã·ã¹ãã ãéä¿¡ãããŠã£ã³ããŠã®æšå¥šãµã€ãºãšäœçœ®ã«ãªãããšãå¿ããŠã¯ãªããŸããã ãããèæ ®ã«å ¥ããã«èªåã§èããŠã¿ããšãç°ãªãDPIã®ã¢ãã¿ãŒéã§ãŠã£ã³ããŠããã©ãã°ãããšããŠã£ã³ããŠãç»é¢ã®åºã«é ããŸãïŒå®è£ æ¹æ³ã«ãã£ãŠç°ãªããŸãïŒã
ã€ãŸãããŠã£ã³ããŠèªäœã®ãµã€ãºãåŠçããå¿ èŠã¯ãããŸãããã·ã¹ãã ã¯åžæã®ãµã€ãºãéä¿¡ããŸãã ãã ããåãŠã£ã³ããŠã¯åŠçããå¿ èŠããããŸãïŒã¢ãã¿ãŒããšã®ã¢ãŒãããŒãžã§ã³1ããããŸãïŒã
ã¢ããªã±ãŒã·ã§ã³ã¯ãåäžã®ãŠã£ã³ããŠãšãããŸããŸãªå ±éã®ããããã£ããã³ãªãã·ã§ã³ãåããInstallManagerãšããŠå®è£ ãããŸãïŒã·ã³ã°ã«ãã³ãä»ããŠå®è£ ãããŸãïŒã ãããã£ãŠãç§ã®ãããžã§ã¯ãã§ã¯ã¯ããã«äŸ¿å©ã§ãããããã§ãå¹²æžããªãããã§ãã
ãããžã§ã¯ããã¡ã€ã«ã®è©³çŽ°ãªèª¬æã ãã©ã«ãå ã®ãŠã£ã³ããŠã®ãã¹ãŠïŒwebinstaller \ windows \
æœè±¡çã§äžè¬çãªã¯ã©ã¹ã®ãŠã£ã³ããŠ
class AbstractDialog
åºæ¬ã¯ã©ã¹-è€æ°ã®ãŠã£ã³ããŠãããå Žåã«äž»èŠãªæ©èœãç°¡åã«ææ¢ããã
class BaseDialog : public AbstractDialog
OnEraseBackgroundã«æ³šæããŠãã ããããŠã£ã³ããŠã®ã°ã©ããŒã·ã§ã³èæ¯ã®å¯èœæ§ãããã«å®è£ ãããŠããŸãã ãããè¡ãã«ã¯ãWINAPI GradientFillé¢æ°ã䜿çšããŸãã
ã©ã¡ãããšããã°ãwebinstaller \ install \ installer_constants.hã§èæ¯ãéåžžã«å€æŽããããšãã§ããŸããGRADIENT_BG宣èšãåé€ããã ãã§ãã
ç§ãã¡ã®å Žåãç¹å®ã®ãŠã£ã³ããŠãã¡ã€ã³ã§ã
class MainDialog : public BaseDialog
ããŸããŸãªçšåºŠã®ãŠãŒãã£ãªãã£ã®ããããçš®é¡ã®ãŠãŒãã£ãªãã£
namespace WindowsUtils
ããšãã°ãRectHolderã¯ãRECTæ§é ããç¶æ¿ããWidthãHeightãªã©ã®è¿œå ã¡ãœãããããã€ãå«ãã§ããŸãã ããã§ãªããã°ãblablabla.bottom-blablabla.topãªã©ãæžãã®ã¯éåžžã«éå±ã§ãã
ãããŠãçµæãäžžããªã眮æMulDivïŒMultiplyThenDivideïŒã¯ãå°ããªå€ïŒãã©ã³ãã«ãšã£ãŠéèŠïŒã§äžå¿«ãªãµã€ãºã®ãžã£ã³ããåé¿ã§ããŸãã
ã¯ãããšããã§ãããã¯ãã¹ãŠããããããããªãè€éãªçããŠãããããžã§ã¯ãããéšåçã«åŒãè£ãããŠããŸããã ããç§ã責ããªãã§ãã ãã-ããããçš®é¡ã®å¥åŠãªãã®ãå©çšå¯èœã§ãã åé€ããããã®ã眮ãæããããã«ããã®å Žã§çµäºããããšãå¿ èŠãªå Žåããããéè«ççã«èŠããŸãã æåŸã«ãããã¯äŸã§ãã ããŠã³ããŒããã¢ã³ããã¯ãã€ã³ã¹ããŒã«ã¯ã¹ã¿ããšããŠè¡ãããŸã-ãããã¯ãã¹ãŠWinIneté¢æ°ãä»ããŠéåžžã«ç°¡åã«è¡ãããèšäºã®ã¡ã€ã³ãããã¯ã«ã¯å®éã«ã¯é©çšãããŸããã
ãããŠãã³ã³ãããŒã«ã«ã€ããŠã¯ã©ãã§ãããã... DPIãµããŒãã«é¢ããéãããã¹ãŠãã·ã³ãã«ã§ããŠã£ã³ããŠããããè¡ããŸãã ãŸããæ®ãã®å®è£ ãããã»ã©è€éã§ã¯ãããŸããã
ãã¹ãŠããã©ã«ãå ã«ãããŸãïŒwebinstaller \ ui \
UIèŠçŽ ã®åºæ¬ã¯ã©ã¹
class BaseControl
éçãªèŠçŽ ããŸãããã ã®ããã¹ã
class StaticControl : public BaseControl
èå³æ·±ãã®ã¯ããŠã£ã³ããŠãåæç»ããã«èŠçŽ ãåæç»ããå¿ èŠããããããããªãããšãšãã°ã©ããŒã·ã§ã³ã䜿çšããå Žåã®èæ¯ã§ããæåã®ã¬ã³ããªã³ã°ã§èŠçŽ ã®äžã«èæ¯ãä¿åããæ¯åæç»ããå¿ èŠããããŸãã ãŸãããŸã å°ãæ¬ é¥ããããŸãããŠã£ã³ããŠãã¯ãªã¢ãããŠããªããšãã«ãã®ãããã¡ãèªã¿åãããããšããããäžéšã«åæç»ãããšãããã¹ããå°ã倪ããªãããšããããŸãã çªç¶ãããªãã¯ã©ã®ããã«ç§»åããããèŠã€ããã§ããã:)
ãªã³ã¯ããããã¹ã
class LinkControl : public StaticControl
ããã¹ããšããã€ãã®ãªã³ã¯ïŒãŠã£ã³ããŠã®äžçªäžã®è¡ïŒã®äž¡æ¹ãè¿œå ã§ããããªãããŒãªèŠçŽ
class CompositeLinkControl : public LinkControl
ãŠãŒã¶ãŒãšãã©ã€ãã·ãŒããªã·ãŒãšã®åæã«ã€ããŠæžãã®ã«äŸ¿å©ã«ãªããŸããã åå¥ã®èŠçŽ ãšããŠè¡ããšãã€ã³ãã³ããšé 眮ãä¹±ããŸãã
é²æã€ã³ãžã±ãŒã¿
class ProgressControl : public BaseControl
ããŒã¿ã«å¿ããŠ2è²ã§ã¹ããªãããæç»ããéåžžã®åºæ¬èŠçŽ ã ãã©ã¹ããŒããŒã¢ãŒãïŒãã·ã¢èªã®æ£ç¢ºãªèª¬æãäžèšã§èŠã€ããã®ã¯å°é£ã§ãïŒã ããã¯ãæäœãã©ã®ãããç¶ãããæ£ç¢ºã«ç¥ãããã€ã³ãžã±ãŒã¿ãŒã®åšããåã§å·¡ãçãã¹ããªãããæãã ãã§ãã ãããè¡ãã«ã¯ããã©ã¡ãŒã¿ãŒ0ã0ã§ãŠã£ã³ããŠããã¿ã€ããŒã®èŠçŽ é¢æ°ãåŒã³åºãå¿ èŠããããŸãã
åè§ãã¿ã³
class RectButtonControl : public LinkControl
ãã¿ã³ã¯æ¡ä»¶ä»ãã§æ£æ¹åœ¢ã§ãããã¿ã³ã®è²ãå ·äœçã«èšå®ãããšãèæ¯ãã§ããèæ¯ã®ç«¯ãäžžããŒãããŸã-ãã¡ãããçŸããã®ããã§ãã
ãã¿ã³ã®ããã¹ãã¯åœ±ä»ãã§æç»ã§ããŸãã
ãã¯ãã«ã®ããŽãªã©ã®ããªãããŒãªèŠçŽ
class LayeredStaticControl : public StaticControl
é ãããå§ããŸãããã ãµã€ãºã¯2ã€ã§ã¯ãªã2ã€ïŒ100ïŒ ã125ïŒ ã150ïŒ ã175ïŒ ã200ïŒ ...ïŒã«ãªãããããã¹ãŠã®è§£å床ã®ç»åãã¹ããã¯ããã®ã¯ç¡é§ã«èŠããŸãããåæã«ããŽã¯éåžžãã¯ã¿ãŒã§ãã ããããWindowsã¯EMF以å€ã®äžè¬çãªãã®ããµããŒãããŠããŸãããããã¯åºæ¬çã«EMF / EMF +ã®GDI / GDI +åŒã³åºããã°ã§ãã ãã®ãªãã·ã§ã³ã¯æªããããŸããããããã€ãã®å¶éããããŸãããéåžžã«è€éãªããšãããå¿ èŠããããå¿ èŠãªç»åãEMF +ã§ã©ããã§ããå Žåã¯ããã ãã§ãã å³é¢ãå転ãããŠããšããžãé©åã«ãŒãããšããããããããŸããã GDI + 1.1ã䜿çšããã ãã§ãæå°ã¯Windows Vistaã§ãïŒæ¬è³ªã¯Metafile.ConvertToEmfPlusé¢æ°ã«ãããŸãïŒã éåžžã®EMFã¯ã¢ã³ããšã€ãªã¢ã¹ãè¡ããŸããã
GDI +ã䜿çšããªãå ŽåãWindowsã®ãã¯ã¿ãŒã³ã³ããŒãã³ãã¯1ã€ãããããŸãããããã¯ãã©ã³ãã¬ã³ããªã³ã°ã§ãã ãŸãã1è²ã§å®è¡ããããããããŽãè²ã«å解ããå¿ èŠããããŸãã
ãããlayered_static_controlã®ãã¹ãŠã§ãã ããã€ãã®æåãååŸãããç®çã®è²ã§é çªã«æç»ãããŸãã å®éãæåã¹ã¿ã€ã«ã¯ãã§ã«ãã©ã³ãå ã§è€åãããŠãããããããã§ã¯ç¹ã«æ°ãããã®ã¯ãããŸããã ã³ã³ããŒãã³ããšè²ã®å éšã§å€æŽã§ããªãããããã®ã¡ã«ããºã ã䜿çšã§ããªãå Žåãé€ããŸãã
ããšãã°ãTwitterããSVGããŠã¹ãåãåºããè²ã®æ°ã§4ã€ã®éšåã«åé¡ããOpenSansãã©ã³ããååŸããŠãäžæ¬åŒ§æåã®ä»£ããã«ããã«é 眮ãããããã«ä¿®æ£ããŸããã ãããã¯ãã¹ãŠã䟿å©ãªãªãŒãã³ãœãŒã¹ãšãã£ã¿ã§ããFontForge㧠30åã§å®äºããŸãã åæã«ããŠã£ã³ããŠã«çŽ æµãªãã©ã³ãã衚瀺ãããŸãã
SVGãIllustratorã«ããŒããããã§ã«ããŒãã«å«ãŸããŠããSVGã«ã¢ã³ããŒãããŸããã FontForgeããã³FontForgeèªäœã«ããŒãããã茪éãéããããããã«ä¿®æ£ãããŸããã ãããè¡ãã«ã¯ãFontForgeã§èŠçŽ ãšã©ãŒãã§ãã¯ãåŒã³åºããŸããèŠçŽ ->ãšã©ãŒãã§ãã¯->茪é->茪éãéããŸãã ãã§ãã¯ããåŸã圌ã¯ç®çã®ãã€ã³ãã匷調衚瀺ããããªãã¯ãã ã€ãã¿ã移åããŠåãå Žæã«çœ®ãå¿ èŠããããŸã-圌ã¯ãã®åè·¯ãéããŸãã
次ã«ã2ã€ã®éèŠãªã¹ãããããããŸãïŒæåãåããµã€ãº/ã¡ããªãã¯ïŒã¬ã€ã€ãŒã«äœ¿çšãããã®ïŒã«èšå®ãããã©ã³ãåïŒFontForgeã®ããããã£ïŒãå€æŽããããšãå¿ããªãã§ãã ãããããããªããšãã¢ããªã±ãŒã·ã§ã³ã«ãã§ã«ããŒãããããšãããšããã§ã«ã€ã³ã¹ããŒã«ãããŠããããšãããããŸãã·ã¹ãã å ã§äœ¿çšãããŸãïŒãªãªãžãã«ïŒã
ã¡ãªã¿ã«ãã¹ããŒã¹ãç¯çŽããŠããããããã©ã³ãããæªäœ¿çšã®æåããã¹ãŠåé€ã§ããŸãããããšããã©ã³ãã¯éåžžã«å°ãããªããŸãïŒãã·ã¢èª+è±èªã®æå+æ°åãšèšå·-29kbïŒã 泚æãã¹ãäž»ãªããšã¯ããã©ã³ãå ã®å€ãã®æåãåæãããŠããããšã§ãã ããšãã°ãæåthã®äžçªäžã®ããŒã¯OpenSansãã©ã³ãã®æåŸã«ãããå¥ã®èŠçŽ ãšããŠè¡šç€ºãããŸãã
èŠçŽ èªäœã«ãã¬ã€ã€ãŒãšãã®è²ãè¿œå ããŸã-ãã¹ãŠãåçŽã§ãã
ããŽ/ã·ã³ãã«ã®äžéšã¯ã°ã©ããŒã·ã§ã³ã§æç»ã§ããŸã-ããã«ã¯GDI +ã䜿çšããå¿ èŠããããã°ã©ããŒã·ã§ã³ãã©ã·ããããŸãã GDI +ã§StaticControlãšLayeredStaticControlã®æ°ããå®è£ ãäœæããã ãã§ãã
ã¡ãªã¿ã«ããŠã£ã³ããŠãéãããã¿ã³ã¯ãŸã æåXãšéåžžã«äŒŒãŠããªããããïŒ\ã®ä»£ããã«ïŒãã©ã³ãã§åå¥ã«äœæãããŸãã
ãªãã·ã§ã³ãšèšå®ãéžæããããã®èŠçŽ ïŒãã§ãã¯ããã¯ã¹ïŒ
class CompositeCheckboxControl : public CompositeLinkControl
ããã§ãããã¯ã¿ãŒãªãã§ã¯å®è¡ã§ããŸããã§ããããã©ãããããããdawãªã©ãæç»ããå¿ èŠããããŸãã åã«æžããããã«ãWindows 10.1703ã ããå ±éã³ã³ãããŒã«ãåæç»ã§ããŸãã ãã¹ãŠãããŽã«ããŠã¹ã䜿çšããäŸã«äŒŒãŠããŸãããã¬ãŒã ãããããªèæ¯ããã©ã°èªäœãå¿ èŠã§ãã
æ©èœã®é¢ã§ãããã°ã©ã ã«äœããã€ã³ã¹ããŒã«ããå ŽåïŒçªç¶ïŒããŸãã¯ç¹ã«éèŠãªãã®ã«èšåããå Žåã¯ãå¥éå¥çŽæžãžã®åç §ãå¿ èŠã«ãªããŸãã ããã¯ãããã§ã¯å¥åã®èŠçŽ ãšããŠæäŸãããŸãã
InstallManagerã§éžæããããªãã·ã§ã³ã®ã¹ããŒã¿ã¹ãå€æŽããéžæèŠçŽ -ãã以å€ã®å ŽåãCompositeCheckboxControlãå®å šã«ç¶æ¿ããŸãã
class OptionCheckboxControl : public CompositeCheckboxControl
ã¢ããªã±ãŒã·ã§ã³ãããã§ã¹ã
webinstaller\installer\install.manifest
次ã®è¡ã«æ³šæããŠãã ããã
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
ããã¯ãã¢ãã¿ãŒã¢ãŒãããšã«DPIããµããŒãããããšãã·ã¹ãã ã«äŒãããã®ã§ãã ä»ã®ãã¹ãŠã®DPI ãªãã·ã§ã³ã¯ããã«ãªã¹ããããŠããŸã ã
ã·ã³ã°ã«ãã³ãããŒãžã£ãŒ
class InstallerManager
ããŸããŸãªã·ã¹ãã æ©èœïŒã©ãããŒïŒ
namespace SystemUtils
ãªãœãŒã¹ã®ãã¡ããã©ã³ããšã¢ã€ã³ã³ãããããŸãã
webinstaller\installer\resources\webinstaller.ttf webinstaller\installer\resources\webinstaller.ico
ãŸããããã¯åºæ¬çã«ããã§ãã ãã¹ãŠã«ã€ããŠ160kbïŒãã¡ããããããã¯ãŒã¯ããããŠã³ããŒãããã«ã匷å¶çã«æ°kbã§ãïŒã
WINAPIã¢ããªã±ãŒã·ã§ã³ã®DPIã«é¢ããçµæïŒ
ãã¹ãŠã®ãŠã£ã³ããŠèŠçŽ ãèªåã§æç»ããªãå Žåã¯ãWindows 10.1703以éã§ã®ã¿ãWindowsã§ã®ã¬ã³ããªã³ã°ã«é¢ããã»ãšãã©ãã¹ãŠã®åé¡ãã·ããã§ããŸãã ãã®å Žåãã©ã¹ã¿ã°ã©ãã£ãã¯ã¹ã®åé¡ã解決ããå¿ èŠãããã ãã§ãã ã¢ããªã±ãŒã·ã§ã³ãããã§ã¹ãã«gdiscalingãšããç¹å¥ãªãªãã·ã§ã³ãè¿œå ããtrueã«èšå®ããã ãã§ååã§ãã ãããã©ã®ããã«æ©èœãããã詳现ã«èª¬æããŸã ã ãã¡ãããã¬ã³ããªã³ã°ã«GDIã䜿çšããå ŽåããŸãã¯ãã¬ãŒã ã¯ãŒã¯ã§GDIã䜿çšããå Žåã
ããããããç»åã®ã»ãããã¢ããªã±ãŒã·ã§ã³ã«è¿œå ããªãå Žå-ãã倧ããªãµã€ãºã§ãããååŸããGDI +ãä»ããŠç®çã®è§£å床ã«åçŽã«çž®å°ã§ããŸã-ããããã®é©åãªè£éã¢ã«ãŽãªãºã ããããŸãã Microsoftèªèº«ã圌ã«å©èšããŠãã ã
äžè¬ã«ãããã¯ç§ãã¡ãèªåã§è¡ãããã·ã¹ãã ãæ æ²ã«ä»»ãããã®ã©ã¡ããã§ãã ããã«ãMicrosoftã¯Spring Creators Updateã§æ°ãããªãã·ã§ã³ãæºåããŠããŸã -Windowsã§ã¢ããªã±ãŒã·ã§ã³ã®ãŒãããä¿®æ£ã§ããããã«ããããã§ãã ã©ã®ããã«æ©èœãããã¯ãŸã æ確ã§ã¯ãããŸããããGDIã¹ã±ãŒãªã³ã°ã匷å¶çã«å«ãŸããŠããå¯èœæ§ããããŸãã
ããããã¡ããgithubäžã®ã¢ããªã±ãŒã·ã§ã³ã®ãªããžã㪠ã