学习编程基于老Windows、Visual Studio、.NET Framework版本好,还是新版本好?
当然是基于新版本好。虽然基于老版本开发的东西,兼容性爆棚,但是毕竟是老东西,3-5年以后就会发现自己落后于时代了。相反,新平台的东西虽然现在兼容性很差,但是3-5年之后,可能情况就不一样了。
如果你是为自己写的程序,就按照你当前所用系统来写就好了。如果你是为别人写的,那么就要问清楚别人用的是什么系统。
按需编程,不要盲目追求高兼容性。从Windows 1.0开始,Windows已经发布了不下20个版本了,这些Windows版本的交集已经远远满足不了当下的需要。
ANSI字符集不够用了,必须要使用Unicode吗?
我们一般认为ANSI和Unicode都是够用的,使用Unicode更好,使用ANSI也是可以接受的。至于用户名里有emoji会造成什么困扰,是用户自己的事情。
如何获得Windows默认字体?
实际上,并不存在Windows默认字体这一种说法。
Windows用户只能自定义非客户区(non-client area)字体,不能自定义客户区(client area)字体。用户定义的非客户区字体可以使用SystemParametersInfo函数SPI_GETNONCLIENTMETRICS选项获取。
客户区的默认字体是"System",它是Win3.1风格的默认字体,它是一种点阵、变宽、只能支持ANSI字符集的字体。这个字体可以由GetStockObject(SYSTEM_FONT)获得。这种字体用来学习编程还可以,但是用在日常的程序中就很难看了。
如果要获取客户区推荐字体,很多人喜欢用DEFAULT_GUI_FONT。但是实际上个人并不是特别推荐,因为DEFAULT_GUI_FONT和代码页绑定得过死。
VC6经典字体:简体中文用"SimSun"(L"宋体"),繁体中文用"PMingLiU"(L"新細明體"),日文用"MS UI Gothic",韩文用"Gulim"(L"굴림"),其它文字用"MS Shell Dlg"。
Win2000经典字体:"Tahoma"。一个过时的知识:如果希望仅在Win2000+使用"Tahoma",在Win95/98/Me/NT4使用经典的"MS Shell Dlg",可以将对话框字体名称设置为"MS Shell Dlg",然后使用DS_SHELLFONT代替DS_SETFONT。
对于现代程序,字体应该和显示语言绑定,而不是和代码页绑定。将字体和代码页绑定是过时的做法。可以把字体信息存放在资源(.rc)字符串表中,然后使用LoadString函数加载,这样可以实现在更改显示语言的同时更改字体,而不用理会代码页的问题。
对话框(DIAlOGEX)资源本身就是可本地化的,所以一般会将字体信息直接写进去。如果需要提取已加载的对话框的字体信息,以保持界面一致性,可以使用SendMessage向对话框发送WM_GETFONT消息获取当前实际起作用的HFONT。
高DPI程序怎么写比较好?
对于Win32程序,如果你要面向目前比较主流的Windows 7,按照传统方法,使用SetProcessDPIAware()和GetDeviceCaps(hdc, LOGPIXELS[X|Y])写就行了。新API的广泛应用需要时间的沉淀,在这个过程中,微软会不断优化老API的使用体验,所以用老API就可以了,暂时没必要新老API混用。实际上对于Windows 8.1、Windows 10 Version 1607 (10.0.14393, RS1)等版本的系统,也建议使用老API,因为这些系统上的新API并不成熟。
对于Win32程序,如果只面向Windows 10的最新版本,可以考虑使用新API。
C#和XXXXXT程序应该改用WPF编写,不要迷恋于Windows Forms,遇到的坑远比WPF多。
[修改于 7年3个月前 - 2017/09/25 00:09:00]
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |