为各种主机环境编程

由于Windows环境本身的特性,有很多因素随用户偏爱或配置而不同。下列因素会影响发
布到其他计算机的应用程序:

· 屏幕分辨率和颜色浓度。
· 字体。
· Windows版本。
· 辅助应用程序。
· DLL位置。

一、 屏幕分辨率和颜色浓度

  Windows桌面的大小和计算机上可用的颜色数是可配置的并依赖于安装的硬件。在开发程
序的计算机上的这些属性有可能与那些在发布的计算机上的对应属性不同。在设置了不同屏
幕分辨率的计算机上,应用程序的外观(窗口、对象及字体大小)可用下列方法被处理:

· 为有最低分辨率(通常为640×480)的用户设计应用程序。不用采取特殊动作动态缩放对
象,使之根据计算机屏幕显示改变比例。在视觉上,设置更高分辨率后对象将变小。

· 在开发计算机上使用任意屏幕分辨率设计,并且在运行时动态缩放所有的窗体和对象以适
应开发和发布计算机的屏幕分辨率之间的差别(屏幕分辨率差别比率)。

· 在开发计算机上使用任意屏幕分辨率设计,并且在运行时仅动态缩放应用程序的窗体。根
据可视控件在窗体中的位置,这可能需要窗体可滚动,以便用户能访问在窗体上所有控件。

1)不动态缩放时的考虑
如果组成应用程序的窗体和可视控件不在运行时动态缩放,应使用最低分辨率设计应用
程序的单元。否则,应用程序在一台设置的屏幕分辨率比开发计算机低的计算机上运行时,
应用程序的窗体可能超出屏幕的边界。

例如,如果开发计算机设置屏幕分辨率为1024×768,窗体的宽度设计为700像素,那么
在一台屏幕分辨率设置为640×480的计算机上,窗体将不会全部显示在Windows桌面之内。

2)动态缩放窗体及控件时的考虑
如果应用程序的窗体和可视控件可动态缩放,需调整缩放进程各个方面以在所有可能的
屏幕分辨率下保证应用程序具有最佳外观。下面是动态缩放应用程序的可视单元应考虑的一
些因素:

· 根据开发计算机与要把应用程序安装到其上的计算机的屏幕分辨率,计算窗体和可视控件
缩放的比例。使用常数代表开发计算机上屏幕分辨率的大小:可以是以像素计算的高度或宽
度。在运行时使用TScreen::Height或TScreen::Width属性获取用户计算机的对应数值。用开
发计算机的值除以用户计算机的值导出在两台计算机之间的屏幕分辨率差别比例。

· 通过减少或增加单元的大小和改变其在窗体上的位置缩放应用程序的可视单元(窗体和控
件)。缩放按开发和用户计算机的屏幕分辨率之间的差别比例进行。缩放和重定位窗体上的
可视控件可通过将窗体的TCustomForm::Scaled属性设为true并调用其TWincontrol::ScaleB
y方法自动进行。ScaleBy方法不会改变窗体的高度和宽度。需自行用屏幕的Height和Width属
性当前值乘上分辨率差别比例。

· 可以不使用TWincontrol::ScaleBy方法自动缩放,而通过在循环引用每个可视控件中并设
置其尺寸和位置自行缩放窗体上的控件。用可视控件的Height和Width属性值乘上屏幕分辨率
差别比例。用可视控件的Top和Left属性值乘上屏幕分辨率差别比例重定位可视控件。

· 如果设计应用程序的计算机设置了比用户计算机低的屏幕分辨率,字体大小将在按比例缩
放可视控件的进程中被减小。如果在设计时字体大小已经太小,在运行时字体可能会被缩小
到不可读。

例如,窗体的缺省字体大小是8。如果开发计算机的屏幕分辨率为640×480而用户的计算
机为1024×768,可视控件尺寸将按0.625的比例减小(640/1024=0.625)。原来的字体大小
8被减小为5(8×0.625=5)。当Windows以减小的字体大小显示应用程序的文本时会挤在一起
并且不可读。

· 有一些可视控件,如TLabel和TEdit,当控件的字体大小变化时会动态地缩放。当窗体和控
件动态缩放时,这会影响发布应用程序。控件除根据屏幕分辨率差别比例缩放外,还会因字
体大小变化而缩放。这种效果可以通过将这些控件的AutoSize属性设为false来禁用。

· 避免使用显式的像素坐标,例如当直接在画布中绘制时。应按开发和用户计算机之间的屏
幕分辨率差别比例相应修改坐标。例如,如果应用程序在画布中绘制一个高10个、宽20像素矩
形,应分别把10和20乘上屏幕分辨率差别比例。这可确保矩形在不同的屏幕分辨率下看起来显
得大小一样。

3)调整颜色浓度变化
要考虑所有的没有设置相同的可用颜色数的发布计算机,最安全的方法是在图形中使用最
少的颜色数。尤其是对glyphs控件,它通常只应使用16色的图形。要显示图像,可以按不同的
分辨率和颜色浓度提供图像的多个拷贝或在应用程序中解释最小分辨率和颜色要求。

二、字体

Windows附带标准的TrueType和点阵(raster)字体集。当设计需要发布到其他计算机上
的应用程序时,应考虑到不是所有的计算机都有Windows标准字体集之外的字体。应用程序使
用的文本组件都应该使用在所有的发布计算机上都可用的字体。当应用程序绝对必要使用非
标准字体时,需要将那种字体与应用程序一起发布。安装程序或应用程序本身必须在发布计
算机上安装字体。第三方字体的发布应服从于字体开发者作出的限制。Windows有一项安全措
施来处理试图使用计算机上不存在的字体。它用匹配最好的现存字体来代替。这可以绕过有
关找不到字体的错误,但结果可能会损害应用程序的可视外观。在设计时最好为这种偶然事
件做好准备。要使应用程序可以使用非标准字体,使用WindowsAPI函数的AddFontResource和
DeleteFontResource。并将非标准字体的.FOT文件与应用程序一起发布。

三、Windows版本
  当使用WindowsAPI功能或通过应用程序访问Windows操作系统的区域时,可能在Windows的
版本不同的各个计算机上有些函数、操作或区域不可用。例如,服务仅对WindowsNT操作系统
适用。如果应用程序是作为一种服务或与服务有关时,应用程序安装在Windows95下将会失败。

对这种可能性,可有一些选择:

· 在应用程序的系统要求中指定应用程序可运行的Windows版本。只在兼容的Windows版本下
安装并使用应用程序是用户的责任。

· 当应用程序安装时检查Windows的版本。若遇到不兼容的Windows的版本,或者暂停安装进
程或至少向用户提出警告。

· 在运行时,就在执行一个不是对所有的版本都适用的操作前检查Windows版本。如果是一
个不兼容的Windows版本,则放弃进程并警告用户。或者,根据Windows的不同版本提供不同的
代码。有些操作在WindowsNT在Windows95的执行是不同的。使用WindowsAPI函数GetVersion
Ex来确定Windows的版本。

时间: 2024-10-12 22:37:36

为各种主机环境编程的相关文章

Linux环境编程之进程(七):守护进程

守护进程也是一种进程,它由如下特性: 1.生存期较长,在系统自举时启动,仅在系统关闭时终止. 2.没有控制终端,在后台运行. 系统中有很多守护进程,它们执行日常事务活动.如日志进程syslogd.web服务器httpd.邮件服务器sendmail和数据块服务器mysqld等.大多数守护进程都是以超级用户(用户ID为0)特权运行.没有一个守护进程具有控制终端,其终端设置为问号(?),终端前台进程组ID设置为-1.内核守护进程以无控制终端方式启动.用户层守护进程缺少控制终端可能是守护进程调用了set

裸机编程与OS环境编程的有关思考

这里的所谓的裸机编程指的是为“无OS支持的硬件系统编程”,而实际的编程工作肯定需要一个环境,通常这样的情况中,编程和编译的环境叫做“宿主机”,最终的程序在“目标机”上运行(交叉编译).而OS环境编程指的是最终运行的程序是在有操作系统支持的环境中运行,而编程和编译的环境,可能是运行程序的机器(本地编译),也可能不是(交叉编译). 裸机编程现在主要是正对低端的嵌入式系统,如SCM(single chip machine).各式MCU.DSP等.当然,编写PC的bootloader肯定也属于裸机编程.

Linux环境编程之共享内存区(一):共享内存区简介

Spark生态圈,也就是BDAS(伯克利数据分析栈),是伯克利APMLab实验室精心打造的,力图在算法(Algorithms).机器(Machines).人(People)之间通过大规模集成,来展现大数据应用的一个平台,其核心引擎就是Spark,其计算基础是弹性分布式数据集,也就是RDD.通过Spark生态圈,AMPLab运用大数据.云计算.通信等各种资源,以及各种灵活的技术方案,对海量不透明的数据进行甄别并转化为有用的信息,以供人们更好的理解世界.Spark生态圈已经涉及到机器学习.数据挖掘.

Linux环境编程之共享内存区(二):Posix共享内存区

现在将共享内存区的概念扩展到将无亲缘关系进程间共享的内存区包括在内.Posix提供了两种在无亲缘关系进程间共享内存区的方法: 1.内存映射文件:由open函数打开,由mmap函数把得到的描述符映射到当前进程地址空间中的一个文件.(上一节就是这种技术) 2.共享内存区对象:由shm_open打开一个Posix名字(也许是在文件系统中的一个路径名),所返回的描述符由mmap函数映射到当前进程的地址空间.(本节内容) Posix共享内存区涉及以下两个步骤要求: 1.指定一个名字参数调用shm_open

Linux环境编程之文件I/O(六):文件属性

引言: 在Linux中使用ls -l filename命令查看filename的属性时,会列出文件的9种属性,例如:ls -l /etc/fstab -rw-r--r-- 1 root root 1102 2013-10-12 02:33 /etc/fstab 从左到右分别是类型与权限.文件个数.该文件或目录的拥有者.所属的组.文件大小.创建时间.文件名 以上这些文件属性的信息,都存放在一个stat的结构体中.下面就来分析一下这个结构体. 要想查看一个文件的stat结构体,可以通过stat类函数

Linux环境编程之文件I/O(四):文件I/O的数据结构

(一) Linux系统支持不同进程间共享打开的文件.内核使用三种数据结构表示打开的文件:进程表项.文件表项.v节点表. 1.进程表项:每个进程在进程表中都有一个记录项,记录项中年包含有一张打开文件描述符表,可将其视为一个矢量,每个描述符占用一项.与每个文件描述符相关联的是: a.文件描述符标志 b.指向一个文件表项的指针 2.内核为所有打开文件维持一张文件表.每个文件表项包含: a.文件状态标志,如读写.添加.同步和非阻塞等. b.当前文件偏移量 c.指向该文件v节点表项的指针 3.每个打开的文

深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow

深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow 最近在公司做深度学习相关的学习和实验,原来一直在自己的电脑上安装虚拟机跑,速度实在太慢,主机本身性能太弱,独显都没有,物理安装Ubuntu也没多大意义,所以考虑用公司性能最强悍的游戏主机(i7 6700+GTX 1070) 做实验,这台主机平时是用来跑HTC VIVE的,现在归我用了o(*≧▽≦)ツ. 原本以为整个一套安装下来会很顺利,一路火花

(转)深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0

深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0 发表于2016年07月15号由52nlp 接上文<深度学习主机攒机小记>,这台GTX1080主机准备好之后,就是配置深度学习环境了,这里选择了比较熟悉Ubuntu系统,不过是最新的16.04版本,另外在Nvidia GTX1080的基础上安装相关GPU驱动,外加CUDA8.0,因为都比较新,所以踩了很多坑. 1. 安装Ubuntu16.04 不考虑双系统,直接安装 Ubuntu16.04,从ubun

云主机环境零费用体验,测试程序还可享受更多惊喜

在云计算快速发展的年代,每个企业IT都需要一个特定的主机环境,来进行程序或命令的搭建,而由于低成本.高弹性.强稳定的特点,云主机自然成为了首选! 更好的是,现在红云正在进行邀请好友注册送礼品活动,我们IT技术可以组团去免费体验云主机,高效搭建程序了,让我们一起去免费的主机环境下实践自己的程序吧,而且还能得礼品,太好了! 活动详情,注册体验红云云主机,并邀请2个好友一起注册红云云主机的平台账号,就可获得价值千元的活动礼包和榨汁杯一套.咨询电话:4008069911