学习Windows编程的一些常见困惑解读
acmilan2017/02/02软件综合 IP:北京

学习编程基于老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]

来自:计算机科学 / 软件综合
0
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
acmilan
进士 学者 笔友
文章
461
回复
2934
学术分
4
2009/05/30注册,5年10个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}