如何改变下拉框的默认选中颜色【灰色】?

danier_sky 2007-02-26 05:39:44
公司要求做一个颜色的下拉框?
<select name="font_bg_color" style="width:60px"
onchange="window.focus()">
<option style="background-color:#FF0000" value="#FF0000">
<option style="background-color:#FFCC00" value="#FFCC00">
<option style="background-color:#FFFF00" value="#FFFF00">
<option style="background-color:#00FF00" value="#00FF00">
<option style="background-color:#00CCFF" value="#00CCFF">
<option style="background-color:#0000FF" value="#0000FF">
<option style="background-color:#9900FF" value="#9900FF" selected>
<option style="background-color:#FFFFFF" value="#FFFFFF">
<option style="background-color:#000000" value="#000000">
</select>

现在存在着N个问题,当鼠标选择到所要的颜色时,却被下拉框的默认选中色【灰色】 给覆盖了,无法看清所要的颜色;当选择了所要的颜色后,在下拉框外任意处点击下,下拉框中的颜色还是【灰色】,要再次点击任意处后才能显示出所选的颜色;如何解决这些问题? ...
...全文
1409 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
littlebad_boy 2007-03-02
  • 打赏
  • 举报
回复
默认颜色还是存在是什么意思?难道你要开发控件?

告诉你好几遍了,你所说的问题在我这儿没有出现。

发个零分贴,不地道。不跟你玩了。
danier_sky 2007-03-02
  • 打赏
  • 举报
回复
楼上的不对,默认颜色还是存在。问题还没解决
littlebad_boy 2007-02-28
  • 打赏
  • 举报
回复
属性写错了地方,改成这个。
<select name="font_bg_color" style="width:60px;background-color:transparent"
onchange="window.focus();">
hbhbhbhbhb1021 2007-02-27
  • 打赏
  • 举报
回复
其实很简单,你把option里写上字不就可以了吗?
红色、绿色之类的,如果你要他不变色,那用户还不知道选了哪个呢,都有利弊的
awaysrain 2007-02-27
  • 打赏
  • 举报
回复
自己模拟个吧
danier_sky 2007-02-27
  • 打赏
  • 举报
回复
楼上的,不行,谁有好方法?
danier_sky 2007-02-27
  • 打赏
  • 举报
回复
没办法公司要求这样,所以还是用色彩,不要字;
模拟说的简单,怎么写啊......
littlebad_boy 2007-02-26
  • 打赏
  • 举报
回复
或者加上背景颜色透明属性看看。
<select name="font_bg_color" style="width:60px"
onchange="window.focus();background-color:transparent">
littlebad_boy 2007-02-26
  • 打赏
  • 举报
回复
没有问题啊,能够正常显示所选择的颜色。
升级一下ie看看。
lion98 2007-02-26
  • 打赏
  • 举报
回复
这个最好自己模拟一个下拉框,系统默认的可能实现起来不太现实!!
lion98 2007-02-26
  • 打赏
  • 举报
回复
变态的要求
孔博士 多媒体电子教室 说明书 2007.2 目 录 第一章 产品介绍 2 第二章 安装与注册 2  2.1 系统需求 2  2.2 设置网络协议 2  2.3产品安装 2  2.4 跨网段路由器的安装 2  2.5 试用与注册 错误!未定义书签。 第三章 学生机端的使用 2  3.1 学生机界面 2  3.2 学生机的管理与设置 2  3.3 电子举手 2  3.4 远程消息 2  3.5 自动接收 2  3.6 文件提交 2  3.7窗口显示模式 2 第四章 教师机端的使用 2 第五章 常见问题解答 2 第一章 产品介绍 多媒体网络教室既无硬件版教学网投资大、安装维护困难、图像传输有重影和水波纹以及线路传输距离限制之弊病;同时又克服了其他同类软件版教学网广播效率低、语音延迟大、操作复杂、稳定性兼容性差等方面的不足。 多媒体网络教室经过严格的软、硬件测试过程,全面支持 Windows 系列操作系统,包括 Windows 9X、Windows Me、Windows NT 4.0、Windows 2000、Windows XP以及 Windows RPL/PXE 无盘工作站,支持跨网段校园网教学,对各种网卡、声卡及显卡都能体现良好的性能,不会出现任何不稳定迹象,是一套集易用性好、兼容性强、稳定性高于一身的教学系统。 多媒体网络教室具有以下特点: 班级模型可根据教室不同情况随意拖动更改,并自动保存。 屏幕广播效率极高,尤其在网络条件较差时亦能体现出良好的性能;可以根据网络条件调节网络补偿强度,根据广播内容调节广播及录制效率,使广播达到最佳效果;可以广播多媒体课件。 语音广播, VCD 广播可以达到学生机与教师机同步,无任何延迟。 当教师在未锁定学生机键盘、鼠标情况下广播或回放时,学生可以利用智能滚动的窗口模式接收广播,此模式可以使学生轻松地跟着教师进行同步操作,边看边练习,使学习由被动转为主动。 教师广播教学和语音教学时允许学生发言,并可方便地切换发言学生;可随时方便地使一组学生加入或退出教学行列。 巧妙的将学生演示与监控转播结合在一起,使教师与学生的交互更加自然、灵活,遥控时教师可以与被遥控学生协同工作。 屏幕录制与电子教鞭结合使用可以实现电子备课。 文件分发功能强大且界面相当易用,可以定义宏目录。 分组教学功能可将学生分为几个小组,有每个小组自行进行教学,有学生组长主动代替教师,对学生组成员进行广播教学、语音教学等各项功能。 语音讨论功能可以将全班学生分成同一个组或分成几个组进行课堂上的讨论,每个组相互不干扰。 文件提交功能可以收集学生所做的作业,方便老师操作。 电子点名功能方便老师统计学生上课考勤情况。 教师可通过视频直播功能将实时视频信号通过网络同步传输给所有学生机。 能从根本上解决跨网段教学。 多媒体网络教室由教师机、学生机、路由器软件所组成,具体功能为: 教师机:广播教学、语音教学、语音对讲、学生演示、监控转播、屏幕录制、屏幕回放、黑屏肃静、网络影院、文件分发、电子教鞭、班级模型、系统设置、远程命令、远程设置、远程消息、分组教学、语音讨论、清除举手、文件收集、电子点名 视频直播 清除未登录学生机、查看学生属性、系统锁定、可选窗口显示模式。 学生机:电子举手、远程消息、窗口接收广播、作业提交、屏幕回放、可选窗口显示模式。 路由器:具有组播转发功能,在需跨越多个物理网段进行教学时可选择安装。 第二章 安装与注册  2.1 系统需求 教师机: 最低配置:CPU Pentium 166 以上,内存 32M 以上,显卡 1M 显存以上,声卡全双工。 推荐配置:CPU Celeron 400 以上,内存 64M,显卡 2M 显存,声卡全双工并带输出回录功能(能录制自身播放的 WAV 文件)。 学生机: 最低配置:CPU Pentium 133 以上,内存 16M 以上,显卡 1M 显存以上,声卡全双工。 推荐配置:CPU MMX166,内存 32M,显卡 2M 显存,声卡全双工。 网络:   10/100兆共享或交换网络均可。 注:1.正式版还需加密狗一只,插入教师机并口处。 2.在Windows NT 4.0 环境下进行VCD广播时,所需显卡指标相对较高。  2.2 设置网络协议 多媒体网络教室需 TCP/IP 协议的支持。如果网络中有 Windows NT 4.0 或 Windows 2000 服务器,并且服务器上安装有 DHCP 服务,此时学生机网卡所绑定的 TCP/IP 协议的设置上可以设为自动获取 IP 地址。如果网络中没有服务器或服务器上没有安装 DHCP 服务,此时网络中所有计算机的网卡所绑定的 TCP/IP 协议的设置上必须指定一个固定的 IP 地址。具体的设置请咨询您所使用的网络的网络管理员。 设置参考: 1、打开控制面板的网络设置项,将 TCP/IP 协议添加到网络组件中(如下图),再选择与网卡绑定的 TCP/IP 协议。 2、在 TCP/IP 属性页中设置正确的 IP 地址,注意不要使 IP 地址重复,设置完成后重新启动计算机。 注: TCP/IP 设置完成后请用 PING 命令验证网络是否连通,如网络不通请尝试检查相应网络设备、重新安装 TCP/IP 协议等手段来解决问题。  2.3产品安装   教师机的安装 1. 插入安装光盘后会自动运行安装程序,进入图形安装界面,按提示进行安装,安装程序会自动检测未安装的组件并进行安装(包括加密狗驱动的安装)。 2. 选择安装部件:教师机。 3. 按照安装提示完成安装。   学生机的安装 1. 插入安装光盘后会自动运行安装程序,进入图形安装界面,按提示进行安装,安装程序会自动检测未安装的组件并进行自动安装。 2. 选择安装部件:学生机。 3. 按照安装提示完成安装。 注:学生机与教师机不能安装于同一台机器中。  2.4 跨网段路由器的安装 如果您需要在两个组播不通的网段间使用多媒体网络教室,就必须在以 Windows NT 作为网关的机器上安装路由器软件,安装方法如下: 1. 使网关的两块网卡分别对应不同的网段,并将各网段的学生机设置网关为相应网段的网关网卡IP地址。 2. 在网络属性服务中添加RIP服务。添加后用Route Print命令应能够打印出正确的路由信息了。 3. 在网关机器上运行多媒体网络教室安装程序,选择安装路由器软件,完成安装。 4. 在网络属性协议中添加协议,选择从软盘安装,将路径指定为多媒体网络教室路由器软件安装路径下的 Drivers 目录,安装完毕后重新启动服务器。 5. 运行组播路由器程序。选择启动按钮,此时应显示启动正常等信息。此时安装过程即告完毕,教学网已可跨网段使用了。 第三章 学生机端的使用  3.1 学生机界面 学生机软件安装完毕后,屏幕右下角会出现一电脑图标,如该图标为黑色 ,表示该学生机未登录上教师机。如为蓝色 ,表示教师机已启动,该学生已登录上教师机。 该图标上点击右键,会出现如下菜单: 学生机在分组教学时,学生组长的界面会根据相应变为教师机执行此功能的界面。  3.2 学生机的管理与设置 为方便系统管理员进行产品安装与系统管理,在学生机端可以按组合键 Ctrl + Alt + Shift + F10 来退出学生机程序。 在学生机端按组合键 Ctrl + Alt + Shift + F11 ,会弹出如下对话框: 学生频道设定可以设定学生机频道号,通过设定教师机与学生机频道号可以使处于同一网段的不同班级上课互不干扰,实现多个班级上课(初始频道号默认为 0 频道)。绑定地址是指在学生机存在多个网卡时选择绑定哪个网卡的 IP 地址。检测周期可以指定学生机与教师机检测连接的最大时延,默认为 10 ,即在 10 秒内学生机与教师机未检测到有任何连接则认为该学生机断线。  3.3 电子举手 学生在听课过程中可以使用电子举手请求教师回应。 学生登录后在右键菜单中选择电子举手或按 Scroll Lock 键即可发出举手信息。  3.4 远程消息 在右键菜单中选择远程消息后出现如下对话框: 学生可以在输入框中输入文字来同教师进行交流,输入文字后敲回车键即可。也可以通过下拉框选择系统提供的默认文字,并敲回车键。  3.5 自动接收 正常条件下,学生机软件只要运行,就会自动登录系统,同时自动检测教师机是否进行操作(如屏幕广播、VCD 广播、屏幕监控、屏幕回放、学生演示、文件分发、黑屏肃静等等)。如正进行以上操作,则学生机自动接收该操作。学生机在接收屏幕广播时,如果教师未锁定学生机键盘鼠标,学生就可以用窗口方式接收广播(窗口可设置为智能滚动、自由滚动、缩放显示),该功能的详细说明请参见?窗口显示模式?。此时学生可在接收屏幕广播的同时进行其他操作,例如可边参看教师的操作边跟着学操作。  3.6 文件提交 当教师机设定可以文件提交后,学生方可使用文件提交功能。 单击学生机的右键,选择"文件提交" 则会出现如下的对话框: 单击第一个按钮,将会出现供您选择的文件或文件夹。 选择要提交的文件后,任务栏中将会出现您要提交的文件。 单击第二个按钮,则供您选择的将是文件夹。 单击第四个按钮,则您选择的文件或文件夹将会被提交到教师机设定的目录下。 提交完成之后教师机可以右击屏幕右下角的图标或班级模型的空白区,选择"察看提交文件夹",则教师可以察看学生所提交的文件。  3.7窗口显示模式 在全屏接收屏幕广播时,如果教师未锁定学生机键盘鼠标,学生就可以在屏幕广播窗口上点击鼠标右键,在图所示的弹出菜单中除去全屏显示选项后即变为窗口方式接收广播。 学生在此模式下可以选择智能滚动、自由滚动、缩放显示,这样学生在操作的同时可以方便地观看教师示范。 自由滚动 此模式下,屏幕广播的内容为1:1显示,接收者可按住鼠标左键拖动画面,这样窗口显示内容会根据鼠标移动而改变。 缩放显示 此模式下,接收者可看到屏幕广播的全部内容,但通常不为1:1显示。 智能滚动 此模式下,屏幕广播的内容为1:1显示,窗口显示的内容能根据屏幕广播或录制时教师的鼠标移动情况而做相应滚动,这样就不会出现在自由滚动模式下有时会看不到教师的操作以及在缩放显示模式下看不清楚屏幕广播具体内容的情况。  3.8屏幕回放 如果教师机将屏幕录制文件共享或发到学生机上,则学生机可以打开该文件,这样便于学生的复习。 单击学生机右键,选择"屏幕回放" 则会出现如下的对话框: 则您可以选择要播放的录制文件。 在播放的过程中,您可以暂停或停止。 第四章 教师机端的使用 4. 1教师机的登陆 运行教师机程序后会出现登录对话框它要求您输入登录密码与频道号,默认登录密码为空,默认频道号为0,教师机在系统设置中的频道号或上次登录的频道号,系统安装完毕后频道号为0,频道号可设置为0~99。 您可以在系统设置的其他设置中设定登录密码,网络设置中设置频道号。 如登录时未检测到加密狗插在计算机并口处,则系统弹出对话框,自动变为5用户演示版,只能有5台学生机登录。 如果检测到并口处有加密狗,则本系统的用户数等于加密狗中的授权用户数。 如产品试用期仅剩余不足1小时,本系统会自动提示您多媒体网络教室需要注册的信息。如试用期满尚未注册,本系统自动转化为5用户演示版。 4.2 教师机界面 教师机运行后,会出现上图界面: 各数字号码分别代表不同分区,各分区依次为: 1. 标题区 2. 班级模型显示区 3. 信息区 4. 音频设定区 5. 远程消息区 6. 对话输入区 7. 图形按钮区 信息区会显示当前时间,目前已登录人数/班级模型总人数。 在班级模型显示区选择学生机(如不选择任何学生机则默认为对全体操作),然后点击图形按钮区中的图形按钮执行相应操作,您也可以在班级模型显示区点击右键通过弹出菜单执行相应操作。图形按钮区按钮为亮黑色时表示此功能可以使用,为灰色时表示此功能不能使用,为凹下状态表示该功能正在执行。当按下某按钮执行某一功能后,再按 Break 键使这一正在执行的功能停止执行。可以使用系统设置下热键设置中的各功能热键来执行相应功能,例如:当教师机未进行广播教学时,按 CTRL+ALT+F6 可以进行广播教学;当教师机已经进行广播教学时,按 Break 键可以停止广播教学。 屏幕右下角有一小图标,当教师机界面隐藏时可双击该图标,屏幕就会显示教师机主界面。也可以利用屏幕最上方的弹出式工具条中的窗口按钮来恢复教师机主界面(见下节)。 4.3右键菜单 教师机启动后,在班级模型区可点击鼠标右键弹出操作菜单,不同的点击位置、所选择学生机的数量和状态不同,都会使弹出的菜单不同。 若此时教师未进行任何操作,可分为如下三种情况: 在班级模型空白区点右键可弹出如下菜单: 在单个学生机图标处点右键可弹出如下菜单: 如选择多个学生机图标点右键可弹出如下菜单: 如此时教师已经进行了操作,则可根据点击位置与具体的选择分为多种情况: 在教室模型空白区点右键弹出菜单中包括允许与此操作同时进行的操作与此操作的终止选项。如屏幕广播时菜单如下: 在单个学生机点右键弹出菜单与选择多个学生机的右键菜单会根据具体情况有变化,具体参见各功能的说明。 在弹出菜单中点击相应的选项就可执行对应操作。 4.4 弹出式工具条 启动教师机后,教师机主界面被最小化时,将鼠标移动到屏幕顶部(右半边)时,会出现以下工具条: 其中窗口按钮可显示教师机主界面,教师机主界面出现后,此工具条将不会弹出;设置按钮指系统设置;复位按钮可以结束当前教师机任何操作使其复位;锁定按钮可锁定此工具条。 您可以利用此工具条方便的执行功能,例如在屏幕广播时如需调用电子教鞭,只要将鼠标移动到屏幕顶部(右半边)使工具条弹出,点击教鞭即可调出电子教鞭。 注:当启用电子教鞭时工具条不会弹出。 4.5 系统功能的执行方式 可以通过4种使用方式来执行多媒体网络教室功能: 1. 通过在班级模型区弹出右键菜单执行。 2. 通过图形按钮区点击图形按钮执行。 3. 通过弹出式工具条执行。 4. 通过系统热键执行(参见"热键设置")。 4.6 班级模形的建立与维护 第一次安装教师机后班级模型为空,使所有的学生机都登录到教师机中则班级模型自动建立,您这时再根据您教室和班级的具体情况进行调整就相当方便。 学生机登录后会在班级模型区以图标显示出来,您可以通过系统设置中的网络设置的学生名称显示项来选择显示Windows登录名或学生名称或学生机机器名,默认显示学生名称。显示学生名称时可以点中某一学生机图标再按F2键手工更改该学生名称。选择其他两种显示项时不允许更改名称。 学生登录后会自动分配一座位,可以手工拖动学生机图标到您所需要的地方,以适应您的教室形状与排列,您可以在系统设置的网络设定中选择座位与机器名绑定或与IP地址绑定,如果您学生机机器名一般不改变,则建议与机器名绑定,如果学生机IP地址一般不改变,则建议与IP地址绑定,默认与机器名绑定,如与机器名绑定,学生机IP地址改变时学生机图标仍为原图标,反之亦然。 可在班级模型区点右键进行锁定图标、按名称或按状态排列图标、重排图标、对齐图标等操作。选择多个学生机后,点击对齐图标会出现如下菜单: 其中当选择两个以上学生机时,对齐图标中只允许进行水平对齐与垂直对齐等操作;当选择三个以上学生机时,对齐图标中还允许进行水平等距与垂直等距等对齐图标操作。选中锁定图标后各学生机位置在教室模型中将不能被改变,即不允许进行拖动、对齐学生机图标等操作。 当需要精确移动学生机图标时,可以选择这些学生机后,再用组合键 Alt + ↑(↓←→) 键按 1 像素位的精度来移动图标,用组合键 Shift + Alt + ↑(↓←→) 键按 10 像素位的精度来移动图标。 当您确认现有的班级模型时,就可以保存模型。每次退出教师机时程序会自动保存教室模型于默认的模型文件中。点击?班级模型?按钮,会出现一短菜单: 您可以选择保存以使现在的排列保存为默认的模型文件(模型文件在教师机安装目录下),您也可以选择另存为...来自己指定所要保存的*.cls文件,点击打开...后选择对应的.cls文件可加载您所保存的班级模型。您可以根据不同的班级情况编辑多个班级模型,并将它另存为...多个.cls模型文件,在不同的班级上课时打开...与此班级相对应的模型文件即可。 在班级模型可通过拖放鼠标来选择一组学生,也可以按Shift键 4.7 广播教学 广播教学功能可以将教师机屏幕和教师讲话传送至学生机。 在班级模型中选择学生,点击广播教学(或按系统热键),可开始广播教学。如广播教学中学生机接收出现异常(如屏幕显示出现缺失),可按组合键 Shift + F5 来刷新学生机屏幕显示的内容。 • 如何广播带有视频文件的课件? 当需要通过屏幕广播带有视频的课件(如《走遍美国》)时,教师机的配置需要在 Celeron 400 以上,建议将教师机的显示模式设置为 16 位色,并要进行以下配置:首先需要在系统设置中将广播和录制效率设置为高广播及录制效率,将传输补偿设为低网络补偿强度;再运行开始菜单下的视频加速设置程序,将出现如下对话框: 选中不允许使用DCI/DirectDraw视频加速功能复选框,确定后即可进行视频课件广播。 如何在广播教学过程中使某学生开始发言、动态切换发言学生、停止发言? 广播教学过程中,通过选定一个已登录的学生机图标,点击右键弹出菜单: 点击开始发言可以请任一已登录的学生进行发言,此时所有接收者在接收到教师广播教学的同时接收该学生发言。只需对其他已登录学生进行同样操作就可以切换发言学生,先前发言学生自动停止发言。如只需停止学生发言,可在当前发言学生机图标上点击右键,选择停止发言即可。 • 广播过程中如何使部分学生机开始或停止接收广播? 广播教学过程中,可以随意控制任意学生机停止或开始接收广播。已停止接收广播的学生机在进行如下操作后将自动接收广播。操作方法为选择您想要操作的学生机,点击右键,弹出如下菜单: 点击开始接收广播即可。 同样的方法可以控制正在接收广播的学生机停止接收广播。 • 如何切换带语音与不带语音广播? 在系统设置中选择屏幕广播同时广播语音,可在屏幕广播的同时广播语音(默认选中)。 • 如何在广播时锁定或不锁定学生机键盘鼠标? 在系统设置中选择全屏广播时锁定学生机键盘鼠标可使学生机在接收广播时鼠标键盘无效。 • 如何使学生边接收广播边操作? 选择系统设置中的学生机以窗口方式接收屏幕广播时,学生机会统一以窗口显示屏幕广播,此时不锁定学生机键盘鼠标,以方便学生边看教师演示边操作。 4.8 电子教鞭 电子教鞭用来辅助教师在进行屏幕广播或录制时进行辅助指导,教师可利用它进行强调重点、进行注解等操作。也可单独使用配合投影仪进行电子板书或屏幕注解。 您可以在开始菜单中找到电子教鞭链接并运行它,也可以在教师机的弹出式工具条中点击教鞭按钮来执行它,执行后会出现如下工具箱,并冻结当前屏幕,您可以使用工具箱中的工具直接在屏幕上绘图,隐藏或关闭电子教鞭后绘制内容将自动清除,您可继续进行正常操作。 闪烁、透明选项允许您对应用电子教鞭在屏幕上所画内容的显示方式进行设置。 其余功能与 Windows 画图类似(包括铅笔、橡皮擦、填充、直线、单向箭头、双向箭头、曲线、矩形框、画椭圆、多边形、注释框、文本、撤消、线条粗细、前景色、背景色),可按住 Shift 键拖动鼠标来画正交线、正方形和圆。 4.9 语音教学 语音教学功能可以将教师机麦克风或其他输入设备的声音传送到学生机。语音教学后学生就可以听到教师声音。 点击语音教学可以开始语音广播。 • 如何在语音教学过程中使某位学生开始发言、动态切换发言学生、停止发言? 点击开始发言可以请该学生发言,其他同学可以接收到该学生发言,只需对其他已登录学生进行同样操作就可以切换发言学生,先前发言学生自动停止发言。如只需停止学生发言,在正在进行发言的学生机图标上点击右键,选择停止发言即可。 • 如何在语音教学过程中使部分学生机开始或停止接收语音教学? 语音教学过程中,可以控制任何已登录或未登录的未接收语音教学的学生机开始接收语音教学,操作方法为在您想操作的学生机图标上点击右键, 选择开始接收语音教学即可。 同样的方法可以控制正在接收语音教学的学生机停止接收语音教学。 • 语音教学时如何设置学生机屏幕显示? 在系统设置的一般设置中可以设定语音教学时是否在学生机显示黑屏窗口。 • 如何在语音教学时锁定或不锁定学生机键盘鼠标? 在系统设置的一般设置中可以设定语音教学时是否锁定学生机键盘鼠标。 4.10 语音对讲 教师可以选择任意一名已登录学生与其进行语音对讲。除教师和此学生外,其他学生而其他的学生不会受到干扰。 • 如何开始与动态切换语音对讲? 单击需要单独与其进行对讲的学生,点击语音对讲即可。通过在其他已登录学生机图标上点击右键,弹出下图所示菜单,选择开始语音对讲可使对讲对象切换为该学生。 4.11 学生演示 教师可以将某一学生的操作演示给其他所选定的学生,在演示过程中,教师可以遥控此机器并同时演示给其他学生。 在班级模型显示区选定需要进行演示操作的一台学生机,点击学生演示,此学生机的屏幕将广播给其他学生机。如学生演示中其他学生机或教师机接收出现异常(如屏幕显示出现缺失),可按组合键 Shift + F5 来刷新屏幕显示的内容。 • 如何动态切换演示机与停止学生演示? 某台学生机演示时教师可以通过在其他一台学生机上点击右键选择开始学生演示来切换为此学生机进行演示。在正在进行演示的学生机上点击右键选择停止学生演示来停止该学生进行演示。 • 学生演示时如何使部分学生停止接收学生演示与开始接收学生演示? 某台学生机演示时教师可以通过在其他学生机上点击右键停止接收学生演示来使学生机停止接收学生演示。选择开始接收学生演示来使学生机开始接收学生演示。 • 如何设置学生演示时是否允许语音对讲? 如果系统设置中的一般设置中学生演示同时进行语音对讲选项已打开(默认已打开),则学生演示的同时,此学生机可与教师机进行语音对讲,此对讲能被其他学生听见。 • 如何遥控演示机? 学生演示过程中,教师可以在学生演示屏幕上点击右键 选择遥控辅导接管学生机操作(具体操作参见"监控转播")。 4.12监控转播 教师机可以监视所选学生机的屏幕(默认为所有学生),每屏可监视多个学生。您还可以在系统设置中设置教师机监控的同屏幕各窗口间、屏幕与屏幕间的切换速度。 选择需被监控的学生,点击监控转播, 按工具条的前一页与后一页可手工切换被监视的一组学生机的屏幕,按下自动滚屏可在切换周期到达后自动切换到下一组被监视的学生机屏幕(切换周期可在系统设置的一般设定中设定)。重排窗口可使多窗口按顺序排列,智能滚动、自由滚动、缩放显示可使本屏幕中所有窗口进行相应设置,停止监控可退出屏幕监控功能,也可按热键退出(见系统设置中的热键设置)。窗口可显示教师机主界面。锁定工具可以锁定此工具条。如监视过程中监视窗口出现异常(如屏幕显示出现缺失),可按组合键 Shift + F5 来刷新屏幕显示的内容。 如何改变同屏监看学生机的数目? 在系统设定中的一般设定中监看设定栏可以改变同屏监看数目,可供选择的有1,4,9,16屏监看。 • 如何在监控过程中使某台学生机屏幕转播给其他学生? 监视过程中在某一台学生机显示窗口中点击右键,点击转播,它允许您选择将该学生屏幕转播给部分学生,可通过Shift键或Ctrl键选择。默认转播给全体学生。 • 如何遥控被监视学生? 在上图的右键弹出菜单中选择遥控可遥控此台被监视的学生机。 • 在遥控时如何与被遥控学生协同工作? 当您遥控某台学生机时,您的屏幕会显示学生机屏幕的内容,您可以操作该学生机。如果您将鼠标移至屏幕最上方右边; 学生锁定按钮可以使教师控制是否让此学生机的学生来操作其鼠标与键盘,当此按钮按下时,此学生机受教师控制,学生不能操作,当此按钮弹起时,学生可操作此学生机(此时建议教师不要移动鼠标、敲击键盘),因此可以使教师方便的对学生进行指导。 只要在遥控过程中点击电子教鞭按钮即可调出电子教鞭功能,当不进行学生锁定时学生也可以调用电子教鞭功能。 4.13 屏幕录制 教师机可以将本地的操作和讲解过程录制为一录像文件,供以后回放,教师可实现电子备课。可以在系统设置的一般设置中选定广播教学同时录制来使广播过程录制为一可回放文件。 点击屏幕录制,出现一对话框,选择将录像文件存放的位置(默认在"我的文档"中),点击保存就开始录制。 4.14 屏幕回放 教师机可以将已录制好的含有操作与讲解的录像文件进行回放,回放过程中自动进行广播。 点击屏幕回放,出现一对话框,教师机可以选择所想要播放的录像文件播放。播放过程广播给学生,播放过程中可点右键弹出菜单,可全屏显示,可关闭窗口退出屏幕回放。教师在回放过程中能进行其他操作。 4.15 文件分发 文件分发允许教师将教师机的目录或文件指定发送至所选学生机的某目录下,若该目录不存在则自动新建此目录;若盘符不存在或路径非法则不允许分发;若文件已存在则自动覆盖原始文件。分发文件前请确认学生机磁盘空间足够,否则空间不足的学生机将无法接收分发文件。 具体操作为:在文件夹与文件目录中选定需要分发的文件,将其拖拽至下面的发送区,此时这些文件状态为未分发,在发送系统菜单上选择传输下拉菜单,选择发送到...,然后输入学生机目录后发送即可。也可直接点击发送将文件传送至上次发送目录。 在待发送的文件栏中点击右键,您可以通过此菜单将所选文件发送到上次发送目录(默认)、缺省发送目录、自定义目录、宏目录(见下面说明),并且可以对任务列表中文件进行删除以及清除列表中的已分发文件。 点击工具条中的选项, 您可以添加、编辑或删除宏,点击添加宏,输入或选择路径,所添加的宏目录会在列表框中显示、您可以选中它并点击编辑宏或删除宏来对它进行编辑或删除。程序会在界面菜单中传输下的发送到...的下拉列表中列出此处设定的宏目录。   4.16 文件提交 文件提交允许学生将学生机的目录或文件指定发送至所选教师机的某目录。通过文件提交学生可以将老师布置的作业提交给老师。 在班级模型的空白区单击"右键",选择"文件提交"。 4.17 网络影院 网络影院支持几乎所有常见的媒体音视频格式: 1. Windows Media 文件:*.ASF。 2. Windows 视频文件:*.AVI ,*.WMV。 3. VCD文件:*.DAT ,*.MPG ,*. MPEG。 4. DVD文件:*.VOB 。 5. Real 文件:*.RM ,*.RMVB。 6. AVI 文件:MPEG-4 ,DIVX。 7. 音频文件:*.MP3 , *.WAV。 点击网络影院 ,会打开网络影院播放器,如下图: • 点击打开,出现如下对话框: 可以选择视频文件进行播放,在播放过程中可以进行切换全屏与窗口、快进、快退、拖动,暂停、停止等操作,可切换循环播放与单向播放,可以调节音量与平衡。 播放过程中如何切换全屏播放与窗口播放? 窗口播放可按全屏或双击播放窗口切换为全屏播放。全屏播放时可双击播放窗口或按 Esc 键切换为窗口播放。 • 如何选择多个视频文件进行播放以及如何切换播放文件? 选择播放文件时,可以通过 Shift 键与 Ctrl 键选择多个文件播放时,播放面板中下拉框内会显示所有选择节目列表,播放器会逐一进行播放,您可以在下拉框内选择任意文件或点击上首、下首来播放您需立即播放的文件,它会中断当前播放的节目转而播放您选择的节目。 • VCD按钮有何用处? 如果您的光驱中有 VCD 光盘,您可以直接点击 VCD 按钮来播放该 VCD ,系统会自动搜索并打开光盘中可以播放的所有文件。 • VCD广播时如何对学生机接收进行控制? 在系统设置的一般设置中可选择 VCD 广播时是否锁定学生机键盘鼠标以及学生机以全屏还是窗口方式接收 VCD 广播,教师可以通过这两项设置来控制学生在接收 VCD 广播时是否允许有进行其他操作。 • VCD广播过程中如何使部分学生机开始或停止接收VCD广播? VCD 广播过程中,可以控制任何已登录或未登录的未接收 VCD 广播的学生机开始接收 VCD 广播,操作方法为在您想操作的学生机图标上点右键,点击开始接收网络影院即可。 同样的方法可以控制正在接收 VCD 广播的学生机停止接收 VCD 广播。 4.18 黑屏肃静 教师可以执行黑屏肃静来禁止学生的任何操作,并显示一静态图片。 4.19 分组教学 分组教学功能可将学生任意分组。通过教师机,教师可以在小组内指定一个主动方代替教师,对学生进行广播教学、语音教学等各项功能。具体操作方法如下: 选定两个或两个以上已登录的学生机,点击分组教学按钮,就可以开始分组教学, 在弹出的窗口中的主动方中选择一个学生来代替教师进行教学,当选定好主动方后,其余该组的成员就会自动变为被动方。在功能选择下拉框中选择好教师希望主动学生所做的功能后,点击开始按钮,这时,主动方就会开始行使教师的权利对被动方进行教学。例如,选择文件分发功能后,主动方会显示原来教师机点击文件分发后弹出的窗口,而被动方还会显示出原来学生机文件分发后弹出的窗口。要停止分组时,点击"停止"按钮即可。 再次进行分组时,选定其他两个或两个以上已登录学生,点击鼠标右键, 在该菜单中点击"开始分组教学"即可进行另一个分组操作,其他操作步骤同第一次分组。 再次对其他已登录学生进行同样操作,就可以实现多个分组,并且进行不同的功能操作。 4.20 电子点名 教师可以通过让学生签到来实现电子点名。 单击图形按钮区的"电子点名"按钮,单击"开始"按钮,则学生机会出现一个对话框:在学生输入姓名后,单击"确定"按钮,则教室机的"学生命"一栏中将会显示学生的姓名,"签到状态"一栏中将显示"已签到",表明该学生已经签到了。 单击"应用"按钮,则教室机的主界面的学生机的名称将会变成学生签到的姓名。 单击"保存为"按钮,则可以把该列表保存起来。 4.21 远程命令 远程命令包括远程命令、本机运行、远程运行、远程重启、远程关机、远程开机和远程退出。 4.21.1远程开机 远程开机可以在教师端控制学生端机器的开启,但必须要求学生机网卡与主板 BIOS 支持。具体条件为: • 学生机网卡支持远程唤醒功能,可参阅网卡说明书加以确认并按说明连接与主板的连接线。 • 主板支持远程唤醒功能,可进入 CMOS 设置,进入电源管理项,检查是否有 WAKE ON LAN 选项并将其设置为 ENABLE。 4.21.2 远程关机及重启 教师机可以控制学生机的关机,此功能可以方便地管理学生机,避免重复性劳动。 选择对应的学生机,点击远程命令, 您可以选中无任何提示强行关闭,这种情况下将不会等待学生机退出当前运行程序而立即关闭。 教师机可以控制学生机的重启,此功能可以方便地管理学生机,避免重复性劳动。 选择对应的学生机,点击远程命令,选择远程重启 您可以选中无任何提示强行关闭,这种情况下将不会等待学生机退出当前运行程序而立即重启。 4.21.3 远程退出 远程退出可以在教师端控制学生机程序的退出,此功能可方便管理员调试多媒体网络教室的安装。学生端重新运行学生机程序即可重新登录。 选择需要退出的学生,点右键选择远程退出,这些学生机程序则退出。 4.21.4 本机运行与远程运行 选择对应的学生机,点击远程命令后再选择远程运行,会出现远程命令中的命令列表,您可以选择一命令直接执行。所选的学生机将执行此命令。 点击远程命令后再选择本机运行,会出现远程命令中的命令列表,您可以选择一命令直接执行。教师机将执行此命令。 4.21.5 远程命令 您可以在教师机上控制学生机中命令的执行。 选择对应的学生机,点击远程命令,选择远程命令...会出现一些已生成的命令, 您可以点击新建按钮新建命令,填入命令说明、命令对应的路径、命令参数(可选)并选择命令窗口打开方式,然后保存即可新建一命令。在命令列表中选中命令名称,点击远程运行可以在所选的学生机上远程执行该命令,点击本机运行可以在本机执行该命令。您可以选中在学生机目录中自动搜索命令,它在您指定路径中无法找到该命令文件时会自动在学生机目录中查找。 举例说明:如果您需要远程执行 Format D: 命令时,可新建一命令: 名称指定为:格式化 D: 盘 路径指定为:C:\Windows\Command\Format.com 参数指定为:D: 远程执行此命令就可以格式化学生机 D: 盘。 4.22 系统设置 远程命令包括远程命令、本机运行、远程运行、远程重启、远程关机、远程开机和远程退出。如图所示: 4.22.1一般设定 一般设定包括屏幕广播、VCD 广播、语音教学、屏幕监看的设定。 默认设置如上图,更改后点击默认按钮可以恢复一般设定的默认值。 屏幕广播设定有以下选项: 1. 屏幕广播同时广播语音。 2. 广播教学同时录制:将广播过程录制为一可回放文件。 3. 学生机以窗口方式接收屏幕广播:此时不锁定学生键盘。 4. 全屏幕广播时锁定学生机键盘鼠标。 5. 学生演示及遥控时进行语音对讲:学生演示时允许教师与此演示者讲话,其他学生能听到他们的对讲。 VCD 广播设定有以下选项: 1. 学生机以窗口方式接收 VCD 广播。 2. VCD 广播时锁定学生键盘鼠标。 语音教学设定有以下选项: 1. 学生机显示黑屏窗口。 2. 锁定学生机键盘鼠标。 监看设定可设置: 1. 同屏监看数目:默认为4屏,最大可为16屏。 2. 切换间隔:教师机同屏幕各学生机窗口依次启动监看的时间间隔,可以在100~2000毫秒之间(切换间隔时间越小,所需要的网络条件越好) 3. 停留时间:自动滚屏时教师机每个学生屏幕的停留时间,可以在2~60秒之间。 4.22.2 高级设置 高级设置包括广播及录制效率的设定、音频设置、举手设置、班级模型设置(包括学生座位与名称显示)。 更改后点击默认按钮可以恢复高级设置的默认值。 广播录制选项: 可以根据广播及录制时屏幕画面切换的快慢来设定广播及录制效率,若屏幕画面切换快(如广播带有视频的课件,如《走遍美国》、Authorware 课件、Flash 课件),则可设定为高广播及录制效率,若屏幕画面切换慢(如广播 Office 教学),则可设定为低广播及录制效率。若屏幕画面切换速度中等(如广播 Photoshop 教学),则可设定为中等广播及录制效率(默认值)。 音频设置选项: 可通过音频设置更改语音音质,如广播 CD 时可以选择 CD 质量以提高音质,但会占用较多的网络带宽。 可通过音频设置选择是否施加静音检查,施加静音检查可减少网络流量、可节省网络带宽,您可根据环境噪音来对环境噪音幅度进行微调。 可通过音频设置调整音屏缓冲区大小(250毫秒~1000毫秒),它可以对声音的延迟进行控制,缓冲区越小,则声音延迟越小,但缓冲区越小对网络要求越高,建议不要轻易设置。 举手设置选项: 举手设置允许在对已举手的学生操作时自动清除该学生举手标志。 班级模型选项: 班级模型选项的设置包括学生座位的设置与名称显示的设置。 学生座位可与机器名或 IP 地址绑定。如机器名固定,建议同机器名绑定,如 IP 地址固定,建议与 IP 地址绑定(默认与机器名绑定)。 名称显示是显示在班级模型中学生机电脑图标下的名称显示方案,可以按 Windows 登录名、学生名称、学生机机器名显示,其中学生名称可以直接在教师机界面下选中该机器后按 F2 键直接更名(默认显示学生名称)。 4.22.3 网络设置 网络设置包括教师机频道号设定、本机绑定地址、断线检测周期、传输补偿设置。 先默认设置,更改后点击默认按钮可以恢复网络设置的默认值。 频道号设定可以设定教师机频道号,通过设定教师机与学生机频道号可以使处于同一网段的不同班级上课互不干扰,实现多个班级上课(初始频道号默认为 0 频道),学生机频道号在远程设置中(或学生机端)设定。本机绑定地址是指在教师机存在多个网卡时指定与哪个网卡的 IP 地址绑定。断线检测周期可以指定学生机与教师机检测连接的最大时延,默认为 10 ,即在 10 秒内学生机与教师机未检测到有任何连接则认为该学生机断线。 若网络传输中经常出现丢失数据包的现象(如:某些 NE2000 兼容卡等),其表现为全部或部分学生机接收广播时显示有异常(出现残块,白斑),则应使用高网络补偿强度。此时网络传输的效率会有所降低,但仍然比同类产品的效率高3倍以上。在较好的网络环境下用可以用低网络补偿强度(默认为中等网络传输补偿强度),强烈建议您将以上补偿选项都试用,并根据表现结果挑选一合适的补偿强度。 若网络传输中会出现错误数据包的现象(如某些 Realtek 8029 芯片的网卡),则须打开网络校验选项,否则软件工作会不正常。 4.22.4 热键设置 用户可根据自己需要更改系统热键。只需在对应处按组合键即可设置完成。默认组合键如下: 先默认设置,更改后点击默认按钮可以恢复热键设置的默认值。 按以上组合键可启动某项操作,按 Break 键停止任意操作。 4.22.5其他设置 其他设置包括系统音效的设定以及教师机登录密码与锁定教师机密码的设定。 默认设置如上图,更改后点击默认按钮可以恢复其他设置的默认值。 系统音效的设定是为学生登录、退出、举手、消息等事件选择配音方案。 教师机登录密码是运行教师机所需的密码。 锁定教师机密码是在教师上课时进行锁定屏幕所设置的密码。 4.23 远程设置 远程设置允许教师机端对学生机的属性进行设置。具体为显示设置、控制面板设置、限制设置、因特网设置、高级设置。 您可以将您的设置进行保存,设置完成后点击保存按钮在出现的对话框中键入文件名后点击保存可保存当前所有设置。 您可以打开系统提供的或自己保存的*.rcf设置文件,点击打开按钮在出现对话框中选择任意配置文件打开。打开后只显示各选项状态,不会自动生效,可对任意选项进行修改,修改后点击设置按钮使各选项生效。 注: 1.复选框按钮分三种状态,灰色打勾表示继承以前的选择、打勾表示此选项被选中、未打勾表示此选项不选中。 2.以下设置除高级设置外,其他设置只适用于 WIN9X。 3.以下设置中,如设置后不能立即生效,则重启学生机后会生效。 4.23.1远程设置 显示设置可改变学生机的色彩数、分辨率以及是否允许学生设置显示属性、背景页、设置页、外观页、屏幕保护页。 4.23.2 控制面板设置 控制面板设置包含对系统、网络、密码、打印机配置属性的隐藏与显示、禁用与启用的设置。 4.23.3 限制设置 限制设置包括对系统外壳、系统注册表、MSDOS 方式的限制与开放。 4.23.4 因特网设置 因特网设置是对学生机中 IE 的代理服务器选项的设置。 4..23.5 高级设置 高级设置包括对学生机广播及录制效率、网络补偿强度、学生机频道号、声音属性的设置。 学生机广播及录制效率、网络补偿强度可根据学生机的配置与具体演示内容设置,并在学生演示与监控转播时生效。详细内容请参考?系统设置?中的?网络设置?。 学生机频道号的设置需与对应的教师机频道号相同。 断线周期是在学生机端衡量是否断线的检测周期,默认为10秒。 声音属性的设置是对学生机音量控制中话筒及波形的设置。 4.24 远程消息 教师可以与学生进行互相交谈。每位教师或学生的发言都会记录在远程消息框中。消息框还会显示学生机的登录、退出以及举手情况。 您可以在对话输入区输入您对学生的发言,您也可以通过下拉框选择您的发言,默认提供一些常用的对话。 教师的文字发言在学生机中显示5秒钟后消失并记录在学生机远程消息对话窗中。 4.25 系统锁定 在教学过程中,教师如需暂时离开教师机而又不想使其他人操作教师机时需要进行系统锁定,您可以在屏幕右下脚 处点击右键,会弹出一个菜单:选择系统锁定,即可锁定教师机,并出现一对话窗,教师如想取消锁定需输入密码。默认锁定密码为空,可以在系统设置的密码设定中设定锁定密码。 4.26 清除举手 如果想清除学生的举手标志,可以在选择有举手标志的学生,单击右键,选择清除举手,可以将举手标志清除。如果您对此学生进行了图形按钮中的操作(黑屏肃静及监控除外),则系统会自动清除该学生的举手标志。 4.27 清除未登陆学生机 清除未登录学生机是将未登录的学生机图标在班级模型区清除,这时班级模型将随之改变,但它不影响学生机的登录。可以在班级模型空白处点击右键,在弹出菜单中选择清除未登录学生机清除所有未登录学生机。可以选择多个未登录学生机点击右键,在弹出菜单中选择清除未登录学生机清除部分未登录学生机,可以选择某一未登录学生机点击右键,在弹出菜单中选择删除清除单个未登录学生机。 4.28 学生属性 可以在班级模型区选择某一学生点击右键查看该学生属性,属性内容为该学生名称、机器名称、登录名称、IP地址、网卡地址、登录状态。 4.29 视频加速程序 视频加速程序允许您设置教师机或学生机是否进行视频硬件加速,是否更改全屏播放 VCD 时的显示模式。 运行开始菜单下的视频加速设置程序(或运行安装目录下的 VideoSet.exe 程序); 选中不允许使用 DCI/DirectDraw 视频加速功能复选框,确定后即可进行视频课件广播。(该设置对广播带视频文件的课件有效)。 选中不允许更改全屏幕播放 VCD 时的显示模式复选框,确定后可以解决当本机显卡与 DirectDraw 全屏幕模式兼容性不好时全屏播放 VCD 的问题。 如需对学生机进行设置,可以在教师机通过远程命令的形式进行设置,命令格式如下: [Drive:] [Path] VideoSet.exe [DisableDirectDraw | EnableDirectDraw] [DisableFullScreenMode | EnableFullScreenMode] • DisableDirectDraw:不允许使用 DCI/DirectDraw 视频加速功能。 • EnableDirectDraw:允许使用 DCI/DirectDraw 视频加速功能。 • DisableFullScreenMode:不允许更改全屏幕播放 VCD 时的显示模式。 • EnableFullScreenMode:允许更改全屏幕播放 VCD 时的显示模式。 • 若未加任何参数,则弹出上图所示对话框。 例如: 使学生机不允许更改全屏幕播放 VCD 时的显示模式,可远程执行 VideoSet DisableFullScreenMode。 使学生机不允许使用 DCI/DirectDraw 视频加速功能,可远程执行 VideoSet DisableDirectDraw。 5.视频直播 教师可通过本功能将实时视频信号通过网络同步传输给所有学生机。 1. 教师机配置要求:Intel PIII/Celeron 533 以上。(建议 PIII 850 以上配置) 2. 学生基配置要求:Intel PIII/Celeron 400 以上。 本功能采用了 MPEG-4 实时压缩技术,并针对各种 CPU 进行了优化,具有传输效果好,占用带宽低的特点。通过一般的 USB 摄像头即可达到 320x240 画面大小 30fps 的效果。 注:本功能兼容所有支持微软 VFW 标准的视频捕获设备, 如 USB 摄像头,WinFast电视卡等。 教师端运行现场直播后,会出现如下主界面: 开始:开始现场直播,学生机可收到直播画面。 停止:停止现场直播。 选项:显示现场直播选项。 截取方式:分为两种:一种是:VFM截取方式,另外一种是:WDM截取方式。其中,VFW格式效率比较低,而WDM效果较好,CPU占用低,但DirectX的版本须是Direct 8.0以上。 视频设置:选择不同的截取方式,视频设置的菜单不同。现以VFW为例,选择?视频设置?,则会出现如下菜单: 视频源设置主要是获取您的视频捕获设备的相关信息,在?视频格式设置?中,您可以调整播放的视频的大小及格式,建议:像素深度选择IYUV。 对于WDM的视频设置是类似的。 退出:停止现场直播功能。 选项: 视频参数: 每秒帧数:每秒钟传输的画面数目。为5,10,15,20,25,30帧/秒。 同时发送音频:在传输画面的同时发送声音。 压缩参数: 画面品质:5%-100%,100%为最优画面质量,但压缩速度较慢,传输带宽占用较高。一般取值为95% 关键帧间隔:1-300,表示关键帧(Key Frame)之间具有多少预测帧,此值越小则接收端延迟越小,但传输带宽占用越高。一般取值为30。 量化器下限:5-31,高级压缩参数,决定画面的最低品质,值越大则画面质量越好,一般不要改动。 量化器上限:5-31,高级压缩参数,决定画面的最高品质,值越大则画面质量越好,一般不要改动。 视频源选项: 显示相应视频捕获设备选项页面(请参考您所使用的视频捕获设备的使用手册)。 第五章 常见问题解答 Q:多媒体网络教室支持无盘工作站吗? A:完全支持 RPL 与 PXE 无盘工作站,详见安装与注册中的介绍。 Q:在Win95无盘工作站上安装并重启后,Windows无法启动报告 Command.com 非法? A:无盘工作站启动所用的 Command.com 并非 Windows 95 原配文件。使用 Windows 95 原配Command.com 替代服务器上?RPLFiles?下的相应文件即可。 Q:多媒体网络教室支持跨网段校园网教学吗? A:支持,只需安装跨网段路由器软件。 Q:多媒体网络教室支持多个班级同时上课吗? A:支持,将各班级设置为不同的频道号即可。 Q:安装程序完成并提示重新启动,但重新启动后报告文件注册失败? A:文件注册失败可能是由于您的系统缺少某些必须的文件或 DirectX Media 及 Windows Socket 2.2 (Windows 95) 升级包安装不正确造成的。请重新安装 DirectX Media 及 Windows Socket 2.2 并检查以下文件: Windows\System\ATL.dll 版本不应低于:3.00.8168 Windows\System\Mfc42.dll 版本不应低于:6.00.8447.0 Windows\System\Msvcrt.dll 版本不应低于:6.00.8397.0 Q:为什么系统设置的高级设置中默认值不选择高网络传输补偿强度、高广播及录制效率和网络数据校验? A:高网络传输补偿强度是针对某些性能较低的网卡(如:某些 NE2000 兼容卡等)而采取的补偿措施,网络数据校验是针对某些特定的网络传输中经常出现发送或接收错误数据包的网卡(如某些 Realtek 8029 网卡)而采取的校验措施,高广播及录制效率是在教师广播或录制时画面切换速度快的情况下(如广播带有视频的课件,例如《走遍美国》、Authorware 课件、Flash 课件)所采取的加强措施。以上这些功能非常重要,它能保障的教学稳定性、流畅性。但会使您的广播及录制效率下降5%~10%,因此如果您的网络条件较好就不要使用高网络传输补偿强度或网络数据校验,如果您不广播课件就不需要使用高广播及录制效率。 Q:为什么我有声卡和麦克风却不能语音广播和语音对讲? A:首先确认您的声卡驱动程序已正确安装。再检查音量控制程序的音频输入设备选项中是否选择了麦克风,如都正确,就可以进行语音广播。语音对讲或学生发言需要全双工声卡的支持,可按如下方法检验:用媒体播放器选择 WAV 文件播放,播放过程中打开附件中的录音机看是否能进行录音,如能录音即为全双工声卡,如不能录音则为单工声卡。 Q:带声音广播课件时,为什么有的学生机听不到课件的声音? A:首先确认教师机是否配置了全双工声卡,学生机均配有声卡,且声卡能正常工作。然后在教师机主界面录音设定中点击录音设备的箭头后选择 Stereo Mixer (混音输出)或类似描述,在小方框上打勾,这样就可以将课件的声音广播出去。 Q:怎样广播带有视频文件的课件? A:当需要通过屏幕广播带有视频的课件(如《走遍美国》)时,教师机的配置需要在 Celeron 400 以上,建议将教师机的显示模式设置为 16 位色,并要进行以下配置:首先需要在系统设置中将广播和录制效率设置为高广播及录制效率,将传输补偿设为低网络补偿强度;再将运行开始菜单下的视频加速设置程序, 选中不允许使用 DCI/DirectDraw 视频加速功能复选框,确定后即可进行课件广播。 Q:为何全屏广播 VCD 时学生机显示不正常? A:这是因为本机器显示卡与 DirectDraw 全屏幕模式兼容性不好,可通过在学生机执行安装目录下的 VideoSet.exe 来弹出上图所示的对话框。选中不允许更改全屏幕播放 VCD 时的显示模式即可正常全屏接收 VCD 广播。 Q:为何对讲时听到自己的回音? A:可能是声卡屏蔽性不好,降低录音音量可以明显减少回音。也可能是对方声卡的录音设定中选择了循环回放,导致播放的声音转到录音口,从而通过网络回传到自己。 Q:为什么我的学生机始终登录不到教师机上? A:请检查您的学生机与教师机频道号是否对应,再用 ping 命令检查学生机与教师机之间 TCP/IP 协议层是否真正连通(网上邻居不准确),如不通则检查或重新安装 TCP/IP 协议。 Q:为什么我的学生机登录后会经常掉线? A:这是由于您的网络异常造成的,请用网络检测软件(如 sniffer )来进行网络检查网络的通畅与阻塞情况,并尝试更换网卡、HUB,检查交换机设置来进行故障确定。 Q:屏幕广播后,学生机屏幕色彩失真? A:此情况一般发生在 Windows 95 机器上。Windows 95 不能动态切换色彩数目,因此用较少的色彩数目显示较多色彩的图像时便会出现色彩失真。请在学生端设置显示属性中的色彩数目并重启机器。 Q:学生机接收不到网络影院的影像? A:请在学生端检查 DirectX Media 是否已正确安装。可使用 Windows Media Player 打开一 MPEG 文件播放。 Q:学生机能够接收网络影院,但画面色彩不正确? A:请先使用窗口方式执行网络影院,若色彩正确则说明学生机显卡与 DirectX 全屏模式兼容性不好。请降低学生机的显示模式、更换学生机显卡驱动程序或关闭学生机图形加速选项后再试。 Q:学生机接收网络影院后显示一黑屏窗口,不能正常播放? A:请先将学生机声卡禁止或移除后再试。若此时能够正常播放,则请检查学生机声卡是否安装正确,若不正确,请重新安装或更换声卡驱动程序。 Q:学生机在接收网络影院一断时间后出现一次很短的停顿? A:此情况是由声卡的时钟不正确造成的,请更换教师机或学生机的声卡(最好是另一品牌)再试。 Q:在执行远程关机或重启后,学生机在启动后桌面会显示 Active Desktop 错误信息? A:远程关机或重启与使用本机的"关闭系统"不同,是强制性关机动作, Active Desktop 不能处理该关机动作。您可将文件夹选项中的 Windows 桌面更新设置为传统风格或在远程关机或重启时不选择强行关闭。 Q:教师机拨号上网后为何学生机登录不到教师机上? A:这是因为教师机所绑定的网卡地址设定的不正确,在系统设置的网络设置中可设定本机绑定地址,将其设置为与学生机所处网段相同的网卡即可使学生机登录。 Q:轮转地监控转播时为何不按照班级模型的顺序切换? A:此时必定刚生成班级模型,您只要关闭教师机程序后再重新运行教师机程序就可以按班级模型的顺序监控。 Q:在Windows-XP-64位系统下安装了电子教师程序后,为什么系统不断重启? A:修改系统boot.ini文件, boot.ini里将NoExecute=OptIn 改为 NoExecute=AlwaysOff(注意大小写,千万不能写错,否则系统无法启动)
TortoiseSVN是一个SVN的客户端,使用方法: 1.Checkout Repository 首先要Checkout服务器端的Repository, 所谓的Checkout就是指获得服务器端指定的Repository存储的所有文件。 这个Checkout和Visual Source Safe的Checkout意义完全不一样, VSS的Checkout指的是锁定某个文件,如果你以前使用过VSS, 在学习Subversion时这个问题一定要注意。 Checkout的具体方式是: 在客户端新建一个空目录,比如:F:\Project1 在该目录上单击右键,在弹出式菜单中选中SVN Checkout..., 之后在“URL of Repository”文本框中填入你想要连接的Repository的地址, 这个URL地址可以用浏览方式加入。 对于在本教程第二节建立的Repository, URL应该是“svn://xxx/project1” (xxx可以是服务器端主机名,也可以是服务器端的ip地址)。 然后点OK,会弹出一个认证对话框, 输入在教程第三节设置的用户名和密码。 点OK后就完成了对Repository的Checkout。 比如:在服务器端Repository中有一个a.txt文件, 那么Checkout之后F:\Project1目录下也会出现一个a.txt文件。 在本例中由于服务器端的Repository还未添加任何文件, 所以在客户端的F:\Project1下没有文件被Checkout。 执行Checkout除了会在F:\Project1产生Repository存储的文件及目录外, 还会产生了一个“.svn”的隐含目录,该目录是由subversion管理的, 不要删除或者手工改动其中的文件和目录。 现在F:\Project1中的文件和目录就叫做Repository的“Working Copy”简写“WC” (这个简写...汗)。 以后对Repository中文件和目录的修改,添加,删除的操作, 都是通过对这个“Working Copy”的操作实现的。 Checkout执行完后, 会发现F:\Project1目录的图标的左下角附着了一个小的状态图标 (当F:\Project1目录中的文件改变时,这个状态图标也会随之变化), 它表示F:\Project1是一个Repository的“Working Copy”, F:\Project1内的所有文件和目录也会有类似的状态图标。 2.添加文件 将要添加的文件或者目录拷贝到F:\Project1下, 然后在该文件或目录上单击右键,TortoiseSVN->Add,点OK。 如果添加了不止一个文件或目录, 则鼠标不要在F:\Project1中点中任何文件, 然后单击右键,TortoiseSVN->Add, 就可以添加多个文件或目录。 这时文件的状态图标会发生变化。 Add命令只是告诉本地的“Working Copy”将该文件纳入版本管理, 并没有将这个改变提交到服务器端, 如果想要别人也看见你对Repository的修改,你需要 在F:\Project1下单击右键,SVN Commit..., 将你所做的修改提交到Repository。 文件的状态图标也会更新。 不管你在“Working Copy”内添加、修改、删除文件后, 要想其他人也看见你的修改, 都必须用Commit命令将所做修改递交到服务器端的Repository。 3.修改文件 用文本编辑器或IDE对文件修改后, 文件的状态图标会变化, 然后单击右键,SVN Commit... 提交修改,只有当执行Commit提交修改后, 你所作的修改才会反映到服务器端的Repository中。 4.删除文件 删除文件时,选中要删除的文件或目录, 单击右键,TortoiseSVN->Delete,提交修改。 注意千万不要用“Delete”键来删除文件,否则将无法提交你的修改。 这一点对目录的删除来说尤为重要。 5.放弃修改 当你添加、修改、删除文件后,决定放弃修改, 你可以单击右键,TortoiseSVN->Revert, 本地的“Working Copy”中的文件和目录会恢复到你修改前的状态。 6.获取Repository的最新版本 当一个团队合作开发项目时, 每一个人都在不断的对Repository进行更新, 你需要不断的更新自己的“Working Copy”, 以获取项目最新的文件。 当第一次获得最新Repository的文件时, 我们用Checkout命令,前面已经介绍了, 以后再获取最新文件时就不用Checkout了。 而改用Update命令。 接着前面的例子,这时F:\Project1已经成为一个“Working Copy”了 (通过执行Checkout命令),现在其他人已经对Repository进行了修改, 我想将别人的修改反映到我的“Working Copy”中, 具体的方法是:在F:\Project1目录上单击右键, SVN Update。这时F:\Project1中的文件就是最新的版本了。 注意,如果当你的“Working Copy”中有被修改的文件, 或者有被删除的文件,并且还未提交这些修改时, 这些文件在执行Update过程中是不会被更新的。 比如你修改了F:\Project1下a.txt文件, 还未提交修改,那么, 当你对F:\Project1进行Update时, a.txt文件是不会更新为Repository上的a.txt文件的。 所以如果想放弃当前的所有修改, 并将F:\Project1下所有文件及目录更新到最新版本, 应该先对F:\Project1执行Revert命令再执行Update命令。 7.subversion的版本控制模型 当你用subversion进行版本控制时, Subversion会记录你对Repository进行的每一次修改(包括添加,修改,删除等等), 每修改一次Repository都会产生一个新的Revision(修订版本号), 不同的Revision代表了不同时刻Repository的状态, 因此我们可以用这个Revision回朔任意时刻Repository的状态, 就像时间机器一样,也就是说某一Revision 就是Repository在某一时刻的一个“快照”。 注意:Revision不是针对某一个文件或者目录, 而是针对整个Repository而言的。 每修改一次Repository,Revision 都会增加1。 Subversion的版本控制模型是一种叫做Copy-Modify-Merge (拷贝-修改-合并)的模型。 考虑这种情况: 张三和李四是公司同一个部门的同事, 他们共同维护一个文本文件a.txt, 并且对该文件进行版本控制, 因此他们把这个文件放到一个Repository上共同维护该文件。 周一上午9点,张三和李四同时想对a.txt文件进行修改, 于是他们同时从Repository上取得该文件的最新版本(Revision 10), 然后进行修改。过了三分钟,张三首先完成了修改, 他在该文件的第五行修改了一个单词的拼写(将Typo改为Type), 于是张三对修改后的文件执行Commit命令, 将修改提交到服务器端的Repository中。 这时Repository的Revision变为11。 六分钟过后,李四也完成了他的修改, 他修改了该文件第十行上的一个单词拼写(将He改为She), 于是他也对修改后的文件执行Commit命令, 这时Subversion 在提交修改时会发现, 李四修改的文件是Revision10的a.txt文件, 而不是最新的Revision 11的a.txt文件。 于是,Subversion 提示李四在提交修改前, 应该先将Working Copy更新到最新版本, 李四执行Update命令将Working Copy更新到Revision 11, 这时Subversion会提示已经完成合并, 李四的a.txt文件的第五行的“Typo”已经变为了“Type”, 第十行还是“She”,就是说Subversion已经将张三的修改“合并”到李四的a.txt文件中了。 之后,李四再执行Commit命令,就能将他对第十行的修改(将He改为She) 提交到服务器端的Repository中了(生成Revision 12)。 但是这种合并在某些情况下会变得复杂一些, 比如:李四对a.txt文件的修改并不是第十行, 而是与张三同样修改第五行的单词, 李四将“Typo”改为“Typr”,并且提交修改, 这时Subversion会提示李四在提交修改前, 应该先将Working Copy更新到最新版本, 李四执行Update命令将Working Copy更新到Revision 11, 这时Subversion将Revision11的a.txt文件与 李四修改的a.txt文件进行合并时发现李四修改的同样是第五行, 于是Subversion就无法判断是李四的修改(“Tpyr”) 正确还是张三的修改(“Type”)正确, 因为他们都是在Revision10的a.txt基础上作的修改。 这种情况叫做Conflict(冲突), a.txt文件的图标会变成一个黄色三角。 这时,只能依靠李四自己去判断到底第三行应该修改为“Typr”还是“Type”。 当李四确定修改之后,在a.txt文件上单击右键,TortoiseSVN->Resolved 告诉Subversion已经解决了Conflict。 这时再执行Commit命令就能提交修改(生成Revision 12)。 Subversion 这种控制方式保证了你对文件所作的修改都是基于文件的最新版本。 8.“.svn”目录 在客户端Working Copy的每一层目录中都会有一个“.svn”目录, 该目录是Subversion进行管理用的目录。 不要手动修改其中的文件。 该目录存储了Working Copy的一个副本 (实际存储副本的地方是F:\project1\.svn\text-base目录), 比如:F:\Project1是一个Working Copy, 该目录下有两个文件a.txt和b.txt还有一个子目录ccc, 子目录ccc中还有一个d.txt文件。 “.svn”目录中存储的是你最近一次执行完Update或者Commit命令之后当前目录中文件的副本, 比如:F:\project1\.svn\text-base中存储的a.txt和b.txt 是最近一次执行完Update或者Commit命令之后F:\project1下的a.txt和b.txt的拷贝。 也就是说你所作的修改都是基于“.svn”目录存储的那些文件。 这种机制可以让我们在不连接网络的情况下, 将Working Copy中的文件恢复到修改之前的状态。 Subversion的Revert命令就是利用了这种机制来实现的。 比如你修改了F:\project1\a.txt文件, 这时你又改变了主意想放弃对该文件的修改, 你可以单击右键,TortoiseSVN->Revert, 修改过的F:\project1\a.txt文件 就会被F:\project1\.svn\text-base中a.txt文件的副本所替代, 使得a.txt恢复到修改前的状态。 Working Copy中每一个子目录下都会有一个“.svn”目录, 并不是只有最上层目录才有“.svn”目录。 所以,F:\project1\ccc下也有一个“.svn”目录, 该目录存储的是F:\project1\ccc\d.txt的副本 (d.txt的副本位于F:\project1\ccc\.svn\text-base)。 也就是说每个“.svn”目录只存储同级目录中的“文件”副本, 而不存储“目录”副本。“.svn”目录存有许多重要的内容, 所以前面说在删除文件或目录时, 必须用TortoiseSVN->Delete, 而不能用“Delete”键来删除文件或目录,尤其是对于目录的删除。 9.混合版本 Subversion的Working Copy被设计成一种能够包含不同版本的文件共存的形式。 比如F:\Project1是一个Working Copy, 该目录下有两个文件a.txt和b.txt。 执行Update命令,将Working Copy更新到最新版本(Revision 24)。 这时,a.txt和b.txt的Revision都是24 (其实对于单个文件来说并不存在Revision, Revision是对于整个Repository而言的, 这里所指的是Repository的Revision24所存储的a.txt和b.txt, 但为了方便而采用这种描述方式,请注意,下同)。 之后,你的同事修改了a.txt,并且提交了修改, 这时Repository的Revision就变成25了。 注意,这时你没有再次执行Update, 因此你的Working Copy的Revision还是24。 这时你修改了b.txt文件,并提交修改。 因为Revision25并没有对b.txt文件进行修改, 因此你对b.txt文件的修改是基于b.txt文件最新的版本, 所以不会出现Conflict。 当你提交b.txt的修改后,产生Revision26。 这时你会发现你的Working Copy中的a.txt文件并不是Revision25中的a.txt文件, 它还是Revision24的a.txt文件,而你的b.txt文件是Revision26的b.txt文件。 也就是说当你Commit时,你的Working Copy中只有你提交的那些文件是最新版本, 而其他没有修改的文件并不会更新为最新版本。 这样就造成了你的Working Copy由不同的Revision文件所组成 (Revision24的a.txt文件和Revision26的b.txt文件)。 前面说过在提交修改前必须保证你是在文件的最新版本基础上修改, 如果在这种混合版本的情况下, 怎样才能知道当前Working Copy中的文件是否为最新版本? 在前面所说的“.svn”目录中有一个文件名为“entries”的文件, 该文件记录了当前Working Copy中的每一个文件的Revision, 因此当你Commit时,Subversion会从该文件中取得你提交文件的Revision, 再与Repository的最新Revision一比较就可以知道你修改的文件是否基于该文件的最新版本。 10.文件的锁定 前面说过Subversion的版本控制模型是一种叫做Copy-Modify-Merge (拷贝-修改-合并)的模型。 该模型在对文本文件进行版本控制时工作的很好, 但是有些需要进行版本控制的文件并不是文本文件, 比如说图像文件,这种模型在这种情况下就不能正常工作了, 因为文本文件可以合并,而二进制文件则无法合并。 所以Subversion从1.2开始支持一种叫Lock-Modify-Unlock (锁定-修改-解锁)的版本控制模型。 在Windows下最常用的版本控制软件Visual Source Safe(VSS)就是采用这种模型。 这种模型要求在对一个文件修改前首先要锁定这个文件, 然后才能修改,这时,别人将无法对该文件进行修改, 当修改完后再释放锁,使其他人可以对该文件进行锁定,然后修改。 锁定文件的方法是:TortoiseSVN->Get Lock...再点OK按钮, 这时就完成了对文件的锁定。 这时,如果其他人想对文件进行锁定时, Subversion会对他提示该文件已经被别人锁定。 当你修改完文件后,然后单击右键,SVN Commit..., 将修改提交,默认情况下,提交的时候就会对该文件解锁, 如果你想仍然锁定该文件,请在commit时弹出的对话框中选中keep lock复选框。 11.文件的附加属性 在Subversion中,每个文件可以拥有一种叫做附加属性的东西。 附加属性描述了该文件所拥有的一些特性。 Subversion已经预定义了一些附加属性 (这里只是指Subversion已经定义了一些附加属性的“名称”, 并不是指已经将这些属性附加在文件上了, 比如默认情况下文本文件一开始不含任何属性, 直到人为的对该文件添加附加属性), 并且你可以对文件添加自定义的属性。 Subversion对待附加属性就像对待文件内容一样, 当修改了一个文件的附加属性(添加,改变,删除附加属性), 即使没有对文件的内容进行修改, 同样可以Commit该文件,就像更改了文件内容那样, Repository也会生成新的Revision, 所以从某种意义上来说, Subversion不区别对待文件的附加属性的修改和文件的内容的修改, 文件的附加属性可以看成是一种特殊的文件内容。 Subversion预定义了若干个附加属性, 这里只讨论“svn:needs-lock”属性, 因为它与我们上面的文件锁定会产生的一个问题有关。 其他的属性可以参考Subversion自带的帮助文档。 考虑这种情况, 张三和李四同时想对一个图片文件a.jpg作修改, 张三在修改时先将该文件锁定,然后进行修改, 同时李四也开始对该文件进行修改, 但李四忘记了对非文本文件进行修改时应该先锁定该文件。 张三首先对该文件修改完毕,于是张三向服务器提交了他的修改。 之后,李四也完成了修改,当他提交修改时, Subversion提示李四的文件版本不是最新的, 在Commit之前应先更新a.jpg到最新版本, 由于图片文件无法合并, 这就意味着张三和李四之间必定有一个人的修改会作废。 应用“svn:needs-lock”属性可以避免这个问题。 当一个文件拥有“svn:needs-lock”属性时, 该文件在没有锁定时,文件的图标是灰色的, 表示该文件是一个只读文件(该文件的Windows只读属性的复选框为选中), 这个灰色的图标就会提醒想对该文件进行修改的人, 在修改该文件之前应该首先锁定该文件。 锁定该文件之后,文件的只读属性就会去掉了, 一旦释放掉锁,文件的图标又会变成灰色, 文件也会变成只读的了。 李四在这种情况下就会避免在没有锁定文件时对文件进行修改。 对非文本文件添加“svn:needs-lock” 属性应该在将该文件第一次添加到Repository时就设置, 当然,一个文件可以在任意时刻添加附加属性, 这样做是为了减少李四所遇到的那个问题发生的几率。 具体的方法是: 首先将a.jpg文件拷贝到Working Copy中, 然后在该文件上单击右键, TortoiseSVN->Add,告诉Subversion要将该文件纳入版本控制, 接着在该文件上单击右键并选中属性, 在弹出的属性对话框中选中Subversion页。 在下拉框选中“svn:needs-lock”, 并在下面的文本框中填入“*” (其实这里填什么都无所谓,只要文件有“svn:needs-lock”附加属性就行), 之后点Set按钮,“svn:needs-lock”附加属性就设置好了。 然后执行Commit命令提交修改。 这时当其他人执行Update时, a.jpg就会添加到他们的Working Copy中, 并且文件的附加属性也会随文件一起被得到。 可以看到a.jpg此时的图标就是灰色的, 文件的Windows属性也是只读的。 12.回到以前的版本 由于Subversion会记录你对Repository的每一次修改, 因此能够很容易的获得Repository以前某一时刻的状态。 比如:现在Repository的最新Revision是56, 这时我想看看Repository在Revision24时的状态, 可以在本地的Working Copy中单击右键, TortoiseSVN->Update to Revision..., 然后输入你想要回复到的Revision号,点OK按钮。 回到以前的版本还有一种情况是我想将Repository的 最新Revision的状态与以前某一个Revision的状态一模一样, 上面那种方法就不适合, 上面的那种方法只是将本地的Working Copy回复到以前的状态, 而服务器端的Repository并没有回到以前的状态。 将Repository的最新Revison的状态回复到以前某个Revision的状态具体的方法是: 先执行Update命令将Working Copy更新到最新的Revision, 然后在Working Copy中单击右键, TortoiseSVN->Show Log, 弹出的Log Messages窗口中会显示该Repository的所有Revision, 选中最新的Revision,之后按住Shift键, 再单击你想回复到的Revision+1的那个Revision (比如Repository的最新Revision是30, 你想将Repository的状态回复到Revision16, 那么就选中Revision30,再按住Shift键, 选中Revision17, 就是说选中Revision17到Revision30之间的所有Revision)。 然后在选中的Revision上单击右键, 选中“Revert changes from these revision”。 再点Yes按钮,就可以将Working Copy的状态回复到目标Revision。 注意,此时只是Working Copy回复到目标Revision, 之后应该用Commit提交修改, 这样Repository最新状态就与目标Revision的状态一样了。 这两种回复到以前版本的方式截然不同, 第一种方式是将整个Working Copy回复到某个Revision, 也就是说这种方式Working Copy中的“.svn”目录所存的文件副本也与目标Revision的一模一样, 如果这时你没有修改文件,你将不能执行Commit命令。 而第二种方式客户端Working Copy中的 “.svn”目录所存的副本始终是最新的Revision的文件副本 (这里我们基于一个假设:在Update之后没有其他人对Repository做修改)。 这种方式就像是我们自己手工将Working Copy的文件状态修改为目标Revision, 在修改之后提交修改一样。 13.查看修改 有时我们对Working Copy的许多文件进行了修改, 这些文件位于不同的子目录,我们就可以在Working Copy的最上层目录单击右键, TortoiseSVN->Check For Modifications, 弹出的对话框就会显示你所做的所有修改明细。 还有一种情况是我们的Working Copy已经很久没有执行Update命令, 我们想看看Working Copy中有哪些文件已经发生修改了, 这时就可以在Working Copy的最上层目录单击右键, TortoiseSVN->Check For Modifications, 在弹出的对话框点击Check Repository按钮后, 就会显示服务器端已经修改了的文件。 该方法还有一个用途就是查看文件的锁定, 当你想锁定一个文件时,你想先看看这个文件有没有被别人锁定, 点击Check Repository按钮会显示服务器端Repository所有被锁定的文件, 如果你想锁定的文件不在这里面,那就说明该文件目前没有人锁定。
word格式排版技巧(1)---本科,硕士,博士毕业论文排版 2007-12-03 21:28 2007-12-22 15:08 )word格式排版技巧(1)---本科,硕士,博士毕业论文排版 2007-12-03 21:28 一.图表和公式的自动编号 在论文中,图表和公式要求按在章节中出现的顺序分章编号,例如图1-1,表2-1,公式3-4等。在插入或删除图、表、公式时编号的维护就成为一个大问题,比如若在第二章的第一张图(图2-1)前插入一张图,则原来的图2-1变为2-2,2-2变为2-3,…,更糟糕的是,文档中还有很多对这些编号的引用,比如“流程图见图2-1”。如果图很多,引用也很多,想象一下,手工修改这些编号是一件多么费劲的事情,而且还容易遗漏!表格和公式存在同样的问题。 能不能让Word对图表公式自动编号,在编号改变时自动更新文档中的相应引用?答案是肯定的!下面以图的编号为例说明具体的作法。 自动编号可以通过Word的“题注”功能来实现。按论文格式要求,第一章的图编号格式为“图1-×”。将图插入文档中后,选中新插入的图,在“插入”菜单选“题注”,新建一个标签“图1-”,编号格式为阿拉伯数字(如果不是点击“编号”修改),位置为所选项目下方,单击“确定”后Word就插入了一个文本框在图的下方,并插入标签文字和序号,此时可以在序号后键入说明,比如“形态学膨胀运算示例”,还可以移动文本框的位置,改动文字的对齐方式等。再次插入图时题注的添加方法相同,不同的是不用新建标签了,直接选择就可以了。Word会自动按图在文档中出现的顺序进行编号。 在文档中引用这些编号时,比如“如图1-1所示”,分两步做。插入题注之后,选中题注中的文字“图1-1”,在“插入”菜单选“书签”,键入书签名,点“添加”。这样就把题注文字“图1-1”做成了一个书签。在需要引用它的地方,将光标放在插入的地方(上例中是“如”字的后面),在“插入”菜单选“交叉引用”,弹出对话框中引用类型选“书签”,“引用内容”为“书签文字”,选择刚才键入的书签名后点“插入”,Word就将文字“图1-1”插入到光标所在的地方。在其他地方需要再次引用时直接插入相应书签的交叉引用就可以了,不用再做书签。 至此我们就实现了图的编号的自动维护,当在第一张图前再插入一张图后,Word会自动把第一张图的题注“图1-1”改为“图1-2”,文档中的“图1-1”也会自动变为“图1-2”。 表格编号的作法与图相同,唯一不同的是表格的题注在表格上方,且要求左对齐。 公式的编号略有不同,插入公式后,将公式单独放在一个段落,版式为“嵌入式”(Word默认),光标放在公式之后,不要(注意是“不要”)选中公式,在“插入”菜单选“题注”,由于没有选中项目,所以“位置”一项为灰色,新建标签“公式1-”,点击“插入”,Word就将标签文字和自动产生的序号插入到光标所在位置。在文档中引用公式编号的方法与图相同,此处不在赘述。公式的编号要求在右边行末,具体的方法在“制表位的使用”一节详细说明。 这里顺便说一下,交叉引用、书签和题注都是Word的域。域是文档中可能发生变化的内容,Word使用域来进行文档自动化。多个域的联合使用可以实现更复杂的功能,各个域的具体使用方法请参考Word的帮助。 注: (1)题注中新建标签时,Word会自动在标签文字和序号之间加一个空格,看起来不那么舒服,可以在插入题注后将空格删除,然后再将文字做成书签。 (2)书签名最好用图(表、公式)的说明文字,尽量做到见名知“图”。 (3)图(表、公式)的编号改变时,文档中的引用有时不会自动更新,可以鼠标右击引用文字,在弹出的菜单中选“更新域”。关闭文档再打开Word会更新所有的域。 二.制表位的使用 制表位是指水平标尺上的位置,它指定了文字缩进的距离或一栏文字开始的位置,使用户能够向左、向右或居中对齐文本行;或者将文本与小数字符或竖线字符对齐。用户可以在制表符前自动插入特定字符,如句号或划线等。默认情况下,按一次Tab键,Word将在文档中插入一个制表符,其间隔为0.74厘米。 制表位的类型包括:左对齐,居中对齐,右对齐,小数点对齐和竖线对齐等,这些制表位的使用方法大致相同,这里仅根据论文中公式排版的要求和目录的制作为例说明制表位的使用方法和效果,更详细的说明请参阅Word的帮助文档。 论文里的公式要求单独放在一个段落,公式居中;按章节进行编号,编号用小括号括起来放在右边行末。首先输入公式和编号,公式的版式选择“嵌入式”,编号用小括号括起来。然后把光标放在公式所在的段落里,点击页面左上角的制表位图标,切换到居中制表位,用鼠标在
VC之美化界面篇 作者:白乔 链接:http://vcer.net/1046595482643.html 本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础: 1. 大致了解MFC框架的基本运作原理; 2. 熟悉Windows消息机制,熟悉MFC的消息映射和反射机制; 3. 熟悉OOP理论和技术; 本文根据笔者多年的开发经验,并结合简单的例子一一展开,希望对读者有所帮助。 1 美化界面之开题篇 相信使用过《金山毒霸》、《瑞星杀毒》软件的读者应该还记得它们的精美界面: 图1 瑞星杀毒软件的精美界面 程序的功能如何如何强大是一回事,它的用户界面则是另一回事。千万不要忽视程序的用户界面,因为它是给用户最初最直接的印象,丑陋的界面、不友好的风格肯定会影响用户对软件程序的使用。 “受之以鱼,不若授之以渔”,本教程并不会向你推荐《瑞星杀毒软件》精美界面的具体实现,而只是向你推荐一些常用的美化方法。 2 美化界面之基础篇 美化界面需要先熟悉Windows下的绘图操作,并明白Windows的幕后绘图操作,才能有的放矢,知道哪些可以使用,知道哪些可以避免…… 2.1 Windows下的绘图操作 熟悉DOS的读者可能就知道:DOS下面的图形操作很方便,进入图形模式,整个屏幕就是你的了,你希望在哪画个点,那个地方就会出现一个点,红的、或者黄的,随你的便。你也可以花点时间画个按钮,画个你自己的菜单,等等…… Windows本身就是图形界面,所以Windows下面的绘图操作功能更丰富、简单。要了解Windows下的绘图操作,要实现Windows界面的美化,就必须了解MFC封装的设备环境类和图形对象类。 2.1.1 设备环境类 Windows下的绘图操作说到底就是DC操作。DC(Device Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。这个环境是设备无关的,所以你在对不同的设备输出时只需要使用不同的设备环境就行了,而作图方式可以完全不变。这也就是Windows的设备无关性。 MFC的CDC类封装了Windows API 中大部分的画图函数。CDC的常见操作函数包括: Drawing-Attribute Functions:绘图属性操作,如:设置透明模式 Mapping Functions:映射操作 Coordinate Functions:坐标操作 Clipping Functions:剪切操作 Line-Output Functions:画线操作 Simple Drawing Functions:简单绘图操作,如:绘制矩形框 Ellipse and Polygon Functions:椭圆/多边形操作 Text Functions:文字输出操作 Printer Escape Functions:打印操作 Scrolling Functions:滚动操作 *Bitmap Functions:位图操作 *Region Functions:区域操作 *Font Functions:字体操作 *Color and Color Palette Functions:颜色/调色板操作 其中,标注*项会用到相应的图形对象类,参见2.1.2内容。 2.1.2 图形对象类 设备环境不足以包含绘图功能所需的所有绘图特征,除了设备环境外, Windows还有其他一些图形对象用来储存绘图特征。这些附加的功能包括从画线的宽度和颜色到画文本时所用的字体。图形对象类封装了所有六个图形对象。 下面的表格列出了MFC的图形对象类: MFC类 图形对象句柄 图形对象目的 CBitmap HBITMAP 内存中的位图 CBrush HBRUSH 画刷特性—填充某个图形时所使用的颜色和模式 CFont HFONT 字体特性—写文本时所使用的字体 CPalette HPALETTE 调色板颜色 CPen HPEN 画笔特性—画轮廓时所使用的线的粗细 CRgn HRGN 区域特性—包括定义它的点 表1 图形对象类和它们封装的句柄 使用CDC和图形对象类,在Windows里绘图还算是很简单的。观察以下的画面: 图2 使用CDC绘制出的按钮 该画面通过以下代码自行绘制的假按钮: BOOL CUi1View::PreCreateWindow(CREATESTRUCT& cs) { //设置背景色 //CBrush CUi1View::m_Back m_Back.CreateSolidBrush(::GetSysColor(COLOR_3DFACE)); cs.lpszClass = AfxRegisterWndClass(0, 0, m_Back, NULL); return CView::PreCreateWindow(cs); } int CUi1View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; //创建字体 //CFont CUi1View::m_Font m_Font.CreatePointFont(120, "Impact"); return 0; } void CUi1View::OnDraw(CDC* pDC) { //绘制按钮框架 pDC->DrawFrameControl(CRect(100, 100, 220, 160), DFC_BUTTON, DFCS_BUTTONPUSH); //输出文字 pDC->SetBkMode(TRANSPARENT); pDC->TextOut(120, 120, "Hello, CFan!"); } 呵呵,不好意思,这并不是真的Windows按钮,它只是一个假的空框子,当用户在按钮上点击鼠标时,放心,什么事情都不会发生。 2.2 Windows的幕后绘图操作 在Window中,如果所有的界面操作都由用户代码来实现,那将是一个很浩大的工程。笔者曾经在DOS设计过窗口图形界面,代码上千行,但实现的界面还是很古板、难看,除了我那个对编程一窍不通的女友,没有一个人欣赏它L;而且,更要命的是,操作系统,包括别的应用程序并不认识你的界面元素,这才是真正悲哀的。认识这些界面的只有你的程序,图2中的按钮永远只是一个无用的框子。 有了Windows,一切都好办了,Windows将诸如按钮、菜单、工具栏等等这些通用界面的绘制及动作都交给了系统,程序员就不用花心思再画那些按钮了,可以将更多的精力放在程序的功能实现方面。 所有的标准界面元素都被Windows封装好了。Windows知道怎么画你的菜单以及你的标注着“Hello, Cfan!”的按钮。当CFan某个快乐的小编(譬如:小飞)点击这个按钮的时候,Windows也明白按钮按下去的时候该有的模样,甚至,当这个友好的按钮获取焦点时,Windows也会不失时机地为它准备一个虚框…… 有利必有弊。你的不满这时候产生了:你既想使用Windows的True Button,可也嫌它的界面不够好看,譬如,你喜欢用蓝色的粗体表达你对CFan的无限情怀(正如图2那样)——人心不足,有办法吗?有的。 3 美化界面之实现篇 Windows还是给程序员留下了很多后门,通过一些途径还是可以美化界面的。本章节我们系统学习一下Windows界面美化的实现。 3.1 美化界面的途径 如何以合法的手段来达到美化界面的效果?一般美化界面的方法包括: 1. 使用MFC类的既有函数,设定界面属性; 2. 利用Windows的消息机制,截获有用的Windows的消息。通过MFC的消息映射(Message Mapping)和反射(Message Reflecting)机制,在Windows准备或者正在绘制该元素时,偷偷修改它的状态和行为,譬如:让按钮的边框为红色; 3. 利用MFC类的虚函数机制,重载有用的虚函数。在MFC框架调用该函数的时候,重新定义它的状态和行为; 一般来说,应用程序可以通过以下两种途径来实现以上的方法: 1. 在父窗口里,截获自身的或者由子元素(包括控件和菜单等元素)传递的关于界面绘制的消息; 2. 子类化子元素,或者为子元素准备一个新的类(一般来说该类必须继承于MFC封装的某个标准类,如:CButton)。在该子元素里,截获自身的或者从父窗口反射过来的关于界面绘制的消息。譬如:用户可以创建一个CXPButton类来实现具有XP风格的按钮,CXPButton继承于CButton。 对于应用程序,使用CXPButton类的途径相对于对话框窗口和普通窗口分成两种: ① 对话框窗口中,直接将原先绑定按钮的CButton类替换成CXPButton类,或者在绑定变量时直接指定Control类型为CXPButton,如图3所示: 图3 为按钮指定CXPButton类型 ②在普通窗口中,直接创建一个CXPButton类对象,然后在OnCreate()中调用CXPButton的Create方法; 以下的章节将综合地使用以上的方法,请读者朋友留心观察。 3.2 使用MFC类的既有函数 在界面美化的专题中,MFC也并非一无是处。MFC类对于界面美化也做了部分的努力,以下是一些可以使用的,参数说明略去。 CWinApp::SetDialogBkColor void SetDialogBkColor( COLORREF clrCtlBk = RGB(192, 192, 192), COLORREF clrCtlText = RGB(0, 0, 0) ); 指定对话框的背景色和文本颜色。 CListCtrl::SetBkColor CReBarCtrl::SetBkColor CStatusBarCtrl::SetBkColor CTreeCtrl::SetBkColor COLORREF SetBkColor( COLORREF clr ); 设定背景色。 CListCtrl::SetTextColor CReBarCtrl::SetTextColor CTreeCtrl::SetTextColor COLORREF SetTextColor( COLORREF clr ); 设定文本颜色。 CListCtrl::SetBkImage BOOL SetBkImage( LVBKIMAGE* plvbkImage ); BOOL SetBkImage( HBITMAP hbm, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0); BOOL SetBkImage( LPTSTR pszUrl, BOOL fTile = TRUE, int xOffsetPercent = 0, int yOffsetPercent = 0 ); 设定列表控件的背景图片。 CComboBoxEx::SetExtendedStyle CListCtrl::SetExtendedStyle CTabCtrl::SetExtendedStyle CToolBarCtrl::SetExtendedStyle DWORD SetExtendedStyle( DWORD dwExMask, DWORD dwExStyles ); 设置控件的扩展属性,例如:设置列表控件属性带有表格线。 图4是个简单应用MFC类的既有函数来改善Windows界面的例子: 图4 使用MFC类的既有函数美化界面 相关实现代码如下: BOOL CUi2App::InitInstance() { //… //设置对话框背景色和字体颜色 SetDialogBkColor(RGB(128, 192, 255), RGB(0, 0, 255)); //… } BOOL CUi2Dlg::OnInitDialog() { //… //设置列表控件属性带有表格线 DWORD NewStyle = m_List.GetExtendedStyle(); NewStyle |= LVS_EX_GRIDLINES; m_List.SetExtendedStyle(NewStyle); //设置列表控件字体颜色为红色 m_List.SetTextColor(RGB(255, 0, 0)); //填充数据 m_List.InsertColumn(0, "QQ", LVCFMT_LEFT, 100); m_List.InsertColumn(1, "昵称", LVCFMT_LEFT, 100); m_List.InsertItem(0, "5854165"); m_List.SetItemText(0, 1, "白乔"); m_List.InsertItem(1, "6823864"); m_List.SetItemText(1, 1, "Satan"); //… } 嗯,这样的界面还算不错吧? 3.3 使用Windows的消息机制 使用MFC类的既有函数来美化界面,其功能是有限的。既然Windows是通过消息机制进行通讯的,那么我们就可以通过截获一些有用的消息来美化我们的界面,以下是一些有用的Windows消息: WM_PAINT WM_ERASEBKGND WM_CTLCOLOR* WM_DRAWITEM* WM_MEASUREITEM* NM_CUSTOMDRAW* 注意,标注*的消息是子元素发送给父窗口的通知消息,其它的为窗口或者子元素自身的消息。 3.3.1 WM_PAINT WM_PAINT消息相信大家都很熟悉,一个窗口要重绘了,就会有一个WM_PAINT消息发送给窗口。 可以响应窗口的WM_PAINT,以更改它们的模样。WM_PAINT的映射函数原型如下: afx_msg void OnPaint(); 控件也是窗口,所以控件也有WM_PAINT消息,通过消息映射我们完全可以定义控件的界面。如图5所示: 图5 利用WM_ PAINT消息美化界面 实现代码也很简单: void CLazyStatic::OnPaint() { CPaintDC dc(this); // device context for painting //什么都不输出,仅仅画一个矩形框 CRect rc; GetClientRect(&rc); dc.Rectangle(rc); } 哈哈,简单吧?不过WM_PAINT确实绝了点,它要求应用程序完成元素界面的所有绘制过程,想象一下如何画出一个完整的列表控件?太烦了吧。一般来说,很少有人喜欢使用WM_PAINT,还有其它更细致的消息。 3.3.2 WM_ERASEBKGND Windows在向窗口发送WM_PAINT消息之前,总会发送一个WM_ERASEBKGND消息通知该窗口擦除背景,默认情况下,Windows将以窗口的背景色清除该窗口。 可以响应窗口(包括子元素)的WM_ERASEBKGND,以更改它们的背景。WM_ERASEBKGND的映射函数原型如下: afx_msg BOOL OnEraseBkgnd( CDC* pDC ); 返回值: 指定背景是否已清除,如果为FALSE,系统将自动清除 参数: pDC指定了绘制操作所使用的设备环境。 图6是个简单的例子,通过OnEraseBkgnd为对话框加载了一副位图背景: 图6 利用WM_ ERASEBKGND消息美化界面 实现代码也很简单: BOOL CUi4Dlg::OnInitDialog() { //… //加载位图 //CBitmap m_Back; m_Back.LoadBitmap(IDB_BACK); //… } BOOL CUi4Dlg::OnEraseBkgnd(CDC* pDC) { CDC dc; dc.CreateCompatibleDC(pDC); dc.SelectObject(&m_Back); //获取BITMAP对象 BITMAP hb; m_Back.GetBitmap(&hb); //获取窗口大小 CRect rt; GetClientRect(&rt); //显示位图 pDC->StretchBlt(0, 0, rt.Width(), rt.Height(), &dc, 0, 0, hb.bmWidth, hb.bmHeight, SRCCOPY); return TRUE; } HBRUSH CUi4Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { //设置透明背景模式 pDC->SetBkMode(TRANSPARENT); //设置背景刷子为空 return (HBRUSH)::GetStockObject(HOLLOW_BRUSH); } 同时别忘了响应OnCtlColor,否则窗口里面的控件就不透明了。OnCtlColor的内容。 3.3.3 WM_CTLCOLOR 在控件显示之前,每一个控件都会向父对话框发送一个WM_CTLCOLOR消息要求获取绘制所需要的颜色。WM_CTLCOLOR消息缺省处理函数CWnd::OnCtlColor返回一个HBRUSH类型的句柄,这样,就可以设置前景和背景文本颜色,并为控件或者对话框的非文本区域选定一个刷子。 WM_CTLCOLOR的映射函数原型如下: afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor ); 返回值: 用以指定背景的刷子 参数: pDC指定了绘制操作所使用的设备环境。 pWnd 控件指针 nCtlColor 指定控件类型,其取值如表2所示: 类型值 含义 CTLCOLOR_BTN 按钮控件 CTLCOLOR_DLG 对话框 CTLCOLOR_EDIT 编辑控件 CTLCOLOR_LISTBOX 列表框 CTLCOLOR_MSGBOX 消息框 CTLCOLOR_SCROLLBAR 滚动条 CTLCOLOR_STATIC 静态控件 表2 nCtlColor的类型值与含义 作为一个简单的例子,观察以下的代码: BOOL CUi5Dlg::OnInitDialog() { //… //创建字体 //CFont CUi1View::m_Font1, CUi1View::m_Font2 m_Font1.CreatePointFont(120, "Impact"); m_Font3.CreatePointFont(120, "Arial"); return TRUE; // return TRUE unless you set the focus to a control } HBRUSH CUi5Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(nCtlColor == CTLCOLOR_STATIC) { //区分静态控件 switch(pWnd->GetDlgCtrlID()) { case IDC_STATIC1: { pDC->SelectObject(&m_Font1); pDC->SetTextColor(RGB(0, 0, 255)); break; } case IDC_STATIC2: { pDC->SelectObject(&m_Font2); pDC->SetTextColor(RGB(255, 0, 0)); break; } } } return hbr; } 生成的界面如下: 图7 利用WM_CTLCOLOR消息美化界面 3.3.4 WM_DRAWITEM OnCtlColor只能修改元素的颜色,但不能修改元素的界面框架,WM_DRAWITEM则可以。 当一个具有Owner draw风格的元素(包括按钮、组合框、列表框和菜单等)需要显示外观时,该元素会发送一条WM_DRAWITEM消息至它的隶属窗口(Owner)。 WM_DRAWITEM的映射函数原型如下: afx_msg void OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct ); 参数: nIDCtl 该控件的ID,如果该元素为菜单,则nIDCtl为0 lpDrawItemStruct 指向DRAWITEMSTRUCT结构对象的指针,DRAWITEMSTRUCT的结构定义如下: typedef struct tagDRAWITEMSTRUCT { UINT CtlType; UINT CtlID; UINT itemID; UINT itemAction; UINT itemState; HWND hwndItem; HDC hDC; RECT rcItem; DWORD itemData; }DRAWITEMSTRUCT; CtlType指定了控件的类型,其取值如表3所示: 类型值 含义 ODT_BUTTON 按钮控件 ODT_COMBOBOX 组合框控件 ODT_LISTBOX 列表框控件 ODT_LISTVIEW 列表视图 ODT_MENU 菜单项 ODT_STATIC 静态文本控件 ODT_TAB Tab控件 表3 CtlType的类型值与含义 CtlID 指定自绘控件的ID值,该成员不适用于菜单项 itemID表示菜单项ID,也可以表示列表框或者组合框中某项的索引值。对于一个空的列表框或组合框,该成员的值为?C1。这时应用程序只绘制焦点矩形(该矩形的坐标由rcItem 成员给出)虽然此时控件中没有需要显示的项,但是绘制焦点矩形还是很有必要的,因为这样做能够提示用户该控件是否具有输入焦点。当然也可以设置itemAction 成员为合适值,使得无需绘制焦点。 itemAction 指定绘制行为,其取值为表4中所示值的一个或者多个的联合: 类型值 含义 ODA_DRAWENTIRE 当整个控件都需要被绘制时,设置该值。 ODA_FOCUS 如果控件需要在获得或失去焦点时被绘制,则设置该值。此时应该检查itemState成员,以确定控件是否具有输入焦点。 ODA_SELECT 如果控件需要在选中状态改变时被绘制,则设置该值。此时应该检查itemState 成员,以确定控件是否处于选中状态。 表4 itemAction的类型值与含义 itemState 指定了当前绘制项的状态。例如,如果菜单项应该被灰色显示,则可以指定ODS_GRAYED状态标志。其取值为表5中所示值的一个或者多个的联合: 类型值 含义 ODS_CHECKED 标记状态,仅适用于菜单项。 ODS_DEFAULT 默认状态。 ODS_DISABLED 禁止状态。 ODS_FOCUS 焦点状态。 ODS_GRAYED 灰化状态,仅适用于菜单项。 ODS_SELECTED 选中状态。 ODS_HOTLIGHT 仅适用于Windows 98/Me/Windows 2000/XP,热点状态:如果鼠标指针位于控件之上,则设置该值,这时控件会显示高亮颜色。 ODS_INACTIVE 仅适用于Windows 98/Me/Windows 2000/XP,非激活状态。 ODS_NOACCEL 仅适用于Windows 2000/XP,控件是否有快速键。 ODS_COMBOBOXEDIT 在自绘组合框控件中只绘制选择区域。 ODS_NOFOCUSRECT 仅适用于Windows 2000/XP,不绘制捕获焦点的效果。 表5 itemState的类型值与含义 hwndItem 指定了组合框、列表框和按钮等自绘控件的窗口句柄;如果自绘的对象为菜单项,则表示包含该菜单项的菜单句柄。 hDC 指定了绘制操作所使用的设备环境。 rcItem 指定了将被绘制的矩形区域。这个矩形区域就是上面hDC的作用范围。系统会自动裁剪组合框、列表框或按钮等控件的自绘制区域以外的部分。也就是说rcItem中的坐标点(0,0)指的就是控件的左上角。但是系统不裁剪菜单项,所以在绘制菜单项的时候,必须先通过一定的换算得到该菜单项的位置,以保证绘制操作在我们希望的区域中进行。 itemData 对于菜单项,该成员的取值为由CMenu::AppendMenu、CMenu::InsertMenu、CMenu::ModifyMenu等函数传递给菜单的值。 对于列表框或这组合框,该成员的取值为由ComboBox::AddString、CComboBox::InsertString、CListBox::AddString或者CListBox::InsertString等函数传递给控件的值。 如果ctlType 的取值是ODT_BUTTON或者ODT_STATIC,itemData的取值为0。 图5是个相应的例子,它修改了按钮的界面: 图8 利用WM_DRAWITEM消息美化界面 实现代码如下: BOOL CUi6Dlg::OnInitDialog() { //… //创建字体 //CFont CUi1View::m_Font m_Font.CreatePointFont(120, "Impact"); //… } void CUi6Dlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { if(nIDCtl == IDC_HELLO_CFAN) { //绘制按钮框架 UINT uStyle = DFCS_BUTTONPUSH; //是否按下去了? if (lpDrawItemStruct->itemState & ODS_SELECTED) uStyle |= DFCS_PUSHED; CDC dc; dc.Attach(lpDrawItemStruct->hDC); dc.DrawFrameControl(&lpDrawItemStruct->rcItem, DFC_BUTTON, uStyle); //输出文字 dc.SelectObject(&m_Font); dc.SetTextColor(RGB(0, 0, 255)); dc.SetBkMode(TRANSPARENT); CString sText; m_HelloCFan.GetWindowText(sText); dc.TextOut(lpDrawItemStruct->rcItem.left + 20, lpDrawItemStruct->rcItem.top + 20, sText); //是否得到焦点 if(lpDrawItemStruct->itemState & ODS_FOCUS) { //画虚框 CRect rtFocus = lpDrawItemStruct->rcItem; rtFocus.DeflateRect(3, 3); dc.DrawFocusRect(&rtFocus); } return; } CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct); } 别忘了标记Owner draw属性: 图9 指定按钮的Owner draw属性 值得一提的是,CWnd内部截获了WM_DRAWITEM、WM_MEASUREITEM等消息,并映射成子元素的相应虚函数的调用,如CButton::DrawItem()。所以,以上例子也可以通过派生出一个CButton的派生类,并重载该类的DrawItem()函数来实现。使用虚函数机制实现界面美化参见3.4章节。 3.3.5 WM_MEASUREITEM 仅仅WM_DRAWITEM还是不够的,对于一些特殊的控件,如ListBox,系统在发送WM_DRAWITEM消息前,还发送WM_MEASUREITEM消息,需要你设置ListBox中每个项目的高度。 WM_DRAWITEM的映射函数原型如下: afx_msg void OnMeasureItem( int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct ); nIDCtl 该控件的ID,如果该元素为菜单,则nIDCtl为0 lpMeasureItemStruct指向MEASUREITEMSTRUCT结构对象的指针,MEASUREITEMSTRUCT的结构定义如下: typedef struct tagMEASUREITEMSTRUCT { UINT CtlType; UINT CtlID; UINT itemID; UINT itemWidth; UINT itemHeight; DWORD itemData } MEASUREITEMSTRUCT; CtlType指定了控件的类型,其取值如表6所示: 类型值 含义 ODT_COMBOBOX 组合框控件 ODT_LISTBOX 列表框控件 ODT_MENU 菜单项 表6 CtlType的类型值与含义 CtlID 指定自绘控件的ID值,该成员不适用于菜单项 itemID表示菜单项ID,也可以表示可变高度的列表框或组合框中某项的索引值。该成员不适用于固定高度的列表框或组合框。 itemWidth 指定菜单项的宽度 itemHeight指定菜单项或者列表框中某项的的高度,最大值为255 itemData 对于菜单项,该成员的取值为由CMenu::AppendMenu、CMenu::InsertMenu、CMenu::ModifyMenu等函数传递给菜单的值。 对于列表框或这组合框,该成员的取值为由ComboBox::AddString、CComboBox::InsertString、CListBox::AddString或者CListBox::InsertString等函数传递给控件的值。 图示出了OnMeasureItem的效果: 图10 利用WM_MEASUREITEM消息美化界面 相应的OnMeasureItem()实现如下: void CUi7Dlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) { if(nIDCtl == IDC_COLOR_PICKER) { //设定高度为 lpMeasureItemStruct->itemHeight = 30; return; } CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct); } 同样别忘了指定列表框的Owner draw属性: 图11 指定下拉框的Owner draw属性 3.3.6 NM_CUSTOMDRAW 大家也许熟悉WM_NOTIFY,控件通过WM_NOTIFY向父窗口发送消息。在WM_NOTIFY消息体中,部分控件会发送NM_CUSTOMDRAW告诉父窗口自己需要绘图。 可以反射NM_CUSTOMDRAW消息,如: ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw) afx_msg void OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult); 参数: pNMHDR 说到底只是一个指针,大多数情况下它指向一个NMHDR结构对象,NMHDR结构如下: typedef struct tagNMHDR { HWND hwndFrom; UINT idFrom; UINT code; } NMHDR; 其中: hwndFrom 发送方控件的窗口句柄 idFrom 发送方控件的ID code 通知代码 对于某些控件来说,pNMHDR则会解释成其它内容更丰富的结构对象的指针,如:对于列表控件来说,pNMHDR常常指向一个NMCUSTOMDRAW对象,NMCUSTOMDRAW结构如下: typedef struct tagNMCUSTOMDRAWINFO { NMHDR hdr; DWORD dwDrawStage; HDC hdc; RECT rc; DWORD dwItemSpec; UINT uItemState; LPARAM lItemlParam; } NMCUSTOMDRAW, FAR * LPNMCUSTOMDRAW; hdr NMHDR对象 dwDrawStage 当前绘制状态,其取值如表7所示: 类型值 含义 CDDS_POSTERASE 擦除循环结束 CDDS_POSTPAINT 绘制循环结束 CDDS_PREERASE 准备开始擦除循环 CDDS_PREPAINT 准备开始绘制循环 CDDS_ITEM 指定dwItemSpec, uItemState, lItemlParam参数有效 CDDS_ITEMPOSTERASE 列表项擦除结束 CDDS_ITEMPOSTPAINT 列表项绘制结束 CDDS_ITEMPREERASE 准备开始列表项擦除 CDDS_ITEMPREPAINT 准备开始列表项绘制 CDDS_SUBITEM 指定列表子项 表7 dwDrawStage的类型值与含义 hdc指定了绘制操作所使用的设备环境。 rc指定了将被绘制的矩形区域。 dwItemSpec 列表项的索引 uItemState 当前列表项的状态,其取值如表8所示: 类型值 含义 CDIS_CHECKED 标记状态。 CDIS_DEFAULT 默认状态。 CDIS_DISABLED 禁止状态。 CDIS_FOCUS 焦点状态。 CDIS_GRAYED 灰化状态。 CDIS_SELECTED 选中状态。 CDIS_HOTLIGHT 热点状态。 CDIS_INDETERMINATE 不定状态。 CDIS_MARKED 标注状态。 表8 uItemState的类型值与含义 lItemlParam 当前列表项的绑定数据 pResult 指向状态值的指针,指定系统后续操作,依赖于dwDrawStage: 当dwDrawStage为CDDS_PREPAINT,pResult含义如表9所示: 类型值 含义 CDRF_DODEFAULT 默认操作,即系统在列表项绘制循环过程不再发送NM_CUSTOMDRAW。 CDRF_NOTIFYITEMDRAW 指定列表项绘制前后发送消息。 CDRF_NOTIFYPOSTERASE 列表项擦除结束时发送消息。 CDRF_NOTIFYPOSTPAINT 列表项绘制结束时发送消息。 表9 pResult的类型值与含义(一) 当dwDrawStage为CDDS_ITEMPREPAINT,pResult含义如表10所示: 类型值 含义 CDRF_NEWFONT 指定后续操作采用应用中指定的新字体。 CDRF_NOTIFYSUBITEMDRAW 列表子项绘制时发送消息。 CDRF_SKIPDEFAULT 系统不必再绘制该子项。 表10 pResult的类型值与含义(二) 以下是一个利用NM_CUSTOMDRAW消息绘制出的多色列表框的例子: 图12 利用NM_CUSTOMDRAW消息美化界面 对应代码如下: void CCoolList::OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult) { //类型安全转换 NMLVCUSTOMDRAW* pLVCD = reinterpret_cast(pNMHDR); *pResult = 0; //指定列表项绘制前后发送消息 if(CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage) { *pResult = CDRF_NOTIFYITEMDRAW; } else if(CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage) { //奇数行 if(pLVCD->nmcd.dwItemSpec % 2) pLVCD->clrTextBk = RGB(255, 255, 128); //偶数行 else pLVCD->clrTextBk = RGB(128, 255, 255); //继续 *pResult = CDRF_DODEFAULT; } } 注意到上例采取了3.1所推荐的第2种实现方法,派生了一个新类CCoolList。 3.4 使用MFC类的虚函数机制 修改Windows界面,除了从Windows消息机制下功夫,也可以从MFC类下功夫,这应该得益于类的虚函数机制。为了防止诸如“面向对象技术”等术语在此泛滥,以下仅举一段代码作为例子: void CView::OnPaint() { // standard paint routine CPaintDC dc(this); OnPrepareDC(&dc); OnDraw(&dc); } 这是MFC中viewcore.cpp中的源代码,很多读者总不明白OnDraw()和OnPaint()之间的关系,从以上的代码中很容易看出,CView的WM_PAINT消息响应函数OnPaint()会自动调用CView::OnDraw()。而作为开发者的用户,可以通过简单的OnDraw()的重载实现对WM_PAINT的处理。所以说,对MFC类的虚函数的重载是对消息机制的扩展。 以下列出了与界面美化相关的虚函数,参数说明略去: CButton::DrawItem CCheckListBox::DrawItem CComboBox::DrawItem CHeaderCtrl::DrawItem CListBox::DrawItem CMenu::DrawItem CStatusBar::DrawItem CStatusBarCtrl::DrawItem CTabCtrl::DrawItem virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); Owner draw元素自绘函数 很显然,位图菜单都是通过这个DrawItem画出来的。限于篇幅,在此不再附以例程。

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧