广东台山 刘伟强:我想试用一下简体Windows NT WorkStation 4.0,又想保留原来的Cwin95 ,能不能使二者共存呢?
李海:可以。Windows NT支持多系统引导,所以你可以在Windows NT系统建立一个DOS分区,然后从该DOS分区启动Windows 95。
南京 李建:我在打印用Excel制作的图表时,总会自动地打印出来边框和表头,有办法把它们去掉吗?
李海:在Excel中用鼠标双击图表进入编辑状态,然后按鼠标右键,从快捷菜单上选择“图表区格式”,这时出现图1所示的对话框,在“边框线”中选择“无”即可去除边框线。如果想去除图表的标题,首先用鼠标选择图表标题,然后按下鼠标右键,在快捷菜单中选择“清除”,这样可以去除掉图表的标题;或者选中图表标题,然后敲DEL键。
广东中山 柴银辉:我想编一个Windows 95的小软件,使它在运行后能成为在Win 95的任务栏的托盘上的一个快捷图标,怎样用Borland C++实现呢?
李海:Tray中文直译为“托盘”,不过我个人认为译作“状态区”也许更好。Tray也称作SysTray、TrayIcon、NotifyIcon、Status Area等,它是Windows 95/NT的任务条上一个特殊区域(图2),许多软件运行时在Tray中加入自己的图标,如果用户点击这个图标,软件会实现相应的功能,如果用户鼠标箭头在图标上停留,Windows 95会显示出相应的工具提示(ToolTip)。这个区域的另一个特殊之处在于你可以从资源管理器内拖文件然后放在这个区域。正是由于这些特性,Tray编程在Windows 95/NT中有特殊的地位。
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, // message identifier PNOTIFYICONDATA pnid // pointer to structure );
dwMessage有三种取值:NIM_ADD、NIM_DELETE和NIM_MODIFY,分别表示添加、删除和修改指定的图标。pnid 是一个指向NOTIFYICONDATA 结构的指针,它的内容因dwMessage参数而异。NOTIFYICONDATA 结构的定义如下:
typedef struct _NOTIFYICONDATA { // nid DWORD cbSize;// 结构所占的字节数 HWND hWnd; // 接受Tray图标消息的窗口句柄 UINT uID; // 由应用程序定义的图标识别符 UINT uFlags; // 标志 UINT uCallbackMessage; // 应用程序定义的消息 HICON hIcon; // Tray图标的句柄 char szTip[64]; // 工具提示字符串 } NOTIFYICONDATA;
这个结构中的uFlags很重要,它有三种取值:NIF_ICON、NIF_MESSAGE和NIF_TIP,分别表示hIcon、uCallbackMessage和szTip参数有效,用来修改图标、消息和工具提示。这三个取值可以同时使用(三个参数相或),也可以单独使用。为了实现对用户鼠标操作的响应,需要在程序中处理uCallbackMessage所定义的消息,该消息的长参数lParam包含Win32所定义的鼠标消息,如果有多个图标,短参数wParam表示图标识别符。在Borland C++ 5.0的EXAMPLES\WIN95\TRAYNOT目录下有一个简单的示例程序(这是Win32 SDK的示范程序,一般的C语言软件包都包括此程序)详细地展示了具体操作,参照前面的介绍,相信你可以轻松地完成自己的程序。
这里顺便说一句,Visual Basic的用户可以从http://www.biogate.com/nagar的Visual Basic Corner下载关于Tray编程的Visual Basic示范代码。
ray@bd748... 肖睿:Windows系列产品如此之多: 16bits:Windows 3.0/3.1/3.2/3.11、16及32bits:Windows 95(英文版/GBK/BIG5/日文版/韩文版/...)、32bits:Windows NT 3.5/3.51/4.0(英文版/中文版/... )...所有以上这些版本,在写程序时该如何区分,即程序如何才能识别目前的操作系统环境?
李海:我在97年9期的“问与答”栏目介绍过了区分Windows的不同语言版本的方法,这里不在赘述。下面,我们分16位和32位两种情况介绍一下获得版本号的办法。
16位程序通常是使用Windows中的GetVersion()函数是用来获取Windows及DOS版本号的,这个函数的返回值是一个四个字节的DWORD类型。低位字节返回Windows主版本号。返回值的低位字的高位字节说明Windows的副版本号,高位字的低位字节说明DOS的副版本号,高位字的高位字节说明DOS的主版本号。比如说,在Windows 95下调用这一函数返回0x07005F03。高位字0x0700说明DOS版本为7.00。低位字的低位字节0x03,低位字节0x5F(十进制95),也就是说Windows 95的Windows版本号为3.95(注意不是4.0)。下表是各版本的Windows 的GetVersion()的返回值:
Windows版本号 | DOS版本号 | |
Windows 3.x | 实际的Windows版本号 | 实际的DOS版本号 |
Windows for Workgroup 3.11 | 3.10 | 实际的DOS版本号 |
Windows NT(16位Windows,或称WOW) | 3.10 | 5.0 |
Windows 95 | 3.95 | 7.0 |
Windows 95 OSR2 | 3.95 | 7.1 |
GetVersion()是标准的Windows版本信息函数,但它返回的值并不总是“真实”的。例如出于兼容性的考虑,Windows for Workgroup 3.11(注意这和Windows 3.11是两个不同的版本)返回的版本号是3.10,不是3.11。你可以使用GetFileVersionInfo()函数来获得USER.EXE的版本号,它返回的将是3.11。Windows 3.2中文版返回的版本号是3.10,而不是3.20,这倒不是技术原因,而是因为Windows 3.2是在Windows 3.10的基础上汉化的。如果想知道程序是否运行在Windows NT环境下,16位程序可以调用WinFlags()函数,用返回值同WF_WINNT相与,如果不为零说明运行在Windows NT中。如果你的C++系统中没有定义WF_WINNT常数,可以加上下面这句:
#define WF_WINNT 0x4000
32位程序仍可以使用GetVersion()函数,但返回值同16位不同。32位软件最好使用GetVersionEx()函数。这个函数使用OSVERSIONINFO结构,该结构是如下定义的:
typedef struct _OSVERSIONINFO{ DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; // 主版本号 DWORD dwMinorVersion; // 副版本号 DWORD dwBuildNumber; // Build号 DWORD dwPlatformId; TCHAR szCSDVersion[ 128 ]; } OSVERSIONINFO;
在Windows 95上,dwMajorVersion为4,dwMinorVersion为0,dwBuildNumber为950,也就是说Windows 95的版本号为4.00.950。dwPlatformId是用来区分Windows 95、Windows NT和Win32s。其取值含义如下:
取值 | 含义 |
VER_PLATFORM_WIN32s | Win32s on Windows 3.1 |
VER_PLATFORM_WIN32_WINDOWS | Win32 on Windows 95 |
VER_PLATFORM_WIN32_NT | Win32 on Windows NT |
若想区别Windows 95与Windows 95 OSR2,要看dwBuildNumber,如果dwBuildNumber的低位字大于1080,则系统为Windows 95 OSR2或更高版本。在Win32中不再支持WinFlags()函数。
尽管GetVersionEx()函数和GetVersion ()函数是Windows提供的标准的版本函数,但在实际编程使用GetFileVersionInfo()函数有时更方便。
1. 深圳 余陆斌:我用的浏览器是IE 4.0,但它似乎不能浏览用BIG5码写的中文页面,我在“语言”选项中添加了[ZH-TW]及[ZH-SG],却无任何效果,也不能使用其他的汉字平台,我该如何进行浏览呢?
2. 浙江 卢晓东:从微软的站点下载的IE4简体中文版完全版,在安装了繁体中文(big5)支持后,WIN95帮助的目录和索引都成为乱码,但帮助内容完好,分析其具体原因是把GB码的目录和索引以BIG5码显示。我把繁体中文支持删掉之后恢复正常,但重新安装后有重复同样的问题而我又要看BIG5码的站点。请问此问题如何解决?
3. Kong Jun kongj@hzdf20...:我在Windows NT 4.0 Workstation上安装了Visual Basic
5.0中文企业版,开始时一切正常。当我安装上Internet Explorer 4.0中文版后(先安装了Windows NT 4.0 Service
Pack 3中文版),VB的联机文档中的汉字全部变成了乱码,是为什么?有什么解决办法吗?
李海:以上三个问题都是有关Internet Explorer 4.0下如何正确显示繁体中文的,现一并做一简单的回答。IE 4.0提供对多种语言的支持,这使你可以在一种语言版本的Windows 95下阅读其他语言的页面。但这种支持需要相应的语言支持模块,仅仅在“语言”选项中增加相应的语言项是不够的。IE 4.0的所有版本都提供西欧语言的支持,简体中文版当然还带有对简体中文的支持,其他语言的支持模块要从微软的主页上下载,地址是http://www.microsoft.com/ie/ie40/download/addon.htm。在这里可以下载繁体中文、日文、朝鲜文和其他语言的支持模块。安装了相应的支持模块后就可以显示BIG5内码的主页了。IE 4.0的一个突出的新特性就是它可以彻底改变Windows 95的桌面,这其中也包括联机文档,但是IE 4.0有一个Bug,使它在显示GB码的联机文档时出现乱码。笔者从微软(中国)有限公司了解到,他们将在1997年12月推出修改后的程序,可以解决这个问题。相信在读者拿到这本杂志时,新的程序已经可以下载了。 IE 4.0的多语言支持虽好,但也有一些缺点,特别是在浏览两种内码混合的主页,如基于WWW的BBS,出现乱码是很常见的。所以在这方面,IE仍不如一些中文系统,象南极星、RichWin 97 for Internet等等,当然这些软件都不是免费的。
江苏 李明:怎样让Access数据库的内容在打印时只打印出干净的数据表格而没有表头、页脚等内容?
李海:在“打印”对话框中选择“设置”按钮,或在“打印预览”状态下按鼠标右键,在快捷菜单上选择“页面设置”项,都会出现图3所示的对话框。在对话框中清除掉“打印标
题”检查框前的选中标志(该检查框也有可能显示的是“只打印 数据”,此时应选中该检查框),这样打印出数据表格没有表头、页脚等内容。
如果您有任何建议,请给我发电子邮件:
。
版权所有 李海,热情软件屋 1997-2006