人机交互实验报告
人机交互实验报告

人机交互实验报告一、实验目的本次实验的目的是探究人机交互在用户体验方面的影响。
通过对不同界面设计的人机交互实验,评估用户在不同设计条件下的满意度和效率,从而优化界面设计,提升用户体验。
二、实验设计1.实验组和对照组的分组随机将志愿者分为实验组和对照组,实验组和对照组的人数分别为20人。
实验组使用一种新的界面设计,而对照组使用传统的界面设计,以便比较两种界面设计的效果。
2.实验材料本实验需要用到计算机、实验软件、实验数据记录表等材料。
3.实验过程a.实验前的准备:向志愿者简要介绍实验目的,明确实验的步骤和要求,并征得志愿者的同意参加实验。
b.实验操作:将志愿者分为实验组和对照组,在同样的任务下,实验组使用新的界面设计,对照组使用传统的界面设计,记录每个志愿者完成任务所需的时间。
c.实验数据的记录和整理:记录志愿者完成任务所需的时间,并记录每个志愿者对界面设计的满意度,包括界面直观性、易操作性、页面设计等方面的评价。
d.数据分析:将实验数据进行统计分析,比较实验组和对照组在完成任务时间和满意度方面的差异,并进行可视化展示。
三、实验结果通过数据分析和可视化展示,我们得出了以下结果:1.实验组的平均完成任务时间较对照组更短,平均节省时间为15%。
2.实验组在界面直观性、易操作性和页面设计方面的满意度均高于对照组。
四、实验结论通过人机交互实验的比较,我们可以得出以下结论:1.进行用户体验优化的界面设计能够提高用户的满意度和效率。
2.在界面设计中,要注重直观性、易操作性和页面设计等方面的考虑,以提升用户的体验。
五、实验总结本次人机交互实验验证了优化界面设计对用户体验的影响。
我们的结果表明,实验组的界面设计在满意度和效率方面都优于对照组。
这说明进行用户体验优化的界面设计可以提升用户的满意度和效率,为用户提供更好的使用体验。
在未来的设计过程中,我们应将用户体验放在首位,不断改进界面设计,以满足用户的需求。
人机交互学习报告(大学)

人机交互学习报告(大学)
人机交互研究报告
介绍
人机交互是指人类与计算机之间的界面和交互方式。
本文档旨
在总结我在大学研究人机交互方面的经验和知识。
研究内容
在人机交互的研究过程中,我主要研究了以下几个方面的内容:
1. 用户体验设计
我了解了用户体验设计的基本概念和原则。
通过研究用户行为
和需求分析,我能够设计出更符合用户期望的界面和交互设计。
2. 人机界面设计
我研究了不同类型的人机界面设计,包括图形界面、命令行界
面和语音界面等。
我了解了各种界面设计的特点和适用场景,并学
会了使用相关的设计工具和技术。
3. 交互技术
我研究了各种交互技术,包括触摸屏、手势识别、语音识别和虚拟现实等。
我了解了这些技术的原理和应用,并通过实践项目来深入理解它们的实际应用。
4. 人机交互评估
我研究了人机交互评估的方法和工具。
通过用户调查、用户测试和专家评审等方式,我能够评估和改进界面和交互设计的质量,以提高用户满意度和系统的可用性。
结论
通过学习人机交互,我对用户体验设计、人机界面设计、交互技术和评估方法有了深入的了解。
这些知识和技能对于我未来在设计和开发用户界面的工作中将非常有帮助。
我相信,在不断学习和实践的过程中,我将能够不断提升自己在人机交互领域的能力和水平。
人机交互技术实验报告

一、实验名称:人机交互技术二、实验目的:1. 了解人机交互技术的基本概念和发展历程;2. 掌握人机交互技术的基本原理和方法;3. 熟悉人机交互技术的应用领域和案例;4. 培养动手能力和创新意识。
三、实验内容:1. 人机交互技术概述(1)人机交互的定义:人机交互是指人与计算机或其他电子设备之间进行信息交流的过程。
(2)人机交互的发展历程:从早期的命令行界面到图形用户界面,再到如今的智能语音交互、手势识别等。
(3)人机交互的原理:人机交互技术涉及多个学科领域,包括计算机科学、心理学、设计学等。
2. 人机交互技术的基本原理和方法(1)输入设备:键盘、鼠标、触摸屏、语音识别等;(2)输出设备:显示器、打印机、投影仪等;(3)交互模型:认知模型、行为模型、设计模型等;(4)交互方法:直接操作、间接操作、自然交互等。
3. 人机交互技术的应用领域和案例(1)桌面操作系统:Windows、macOS、Linux等;(2)移动设备:智能手机、平板电脑等;(3)虚拟现实:VR游戏、VR教育等;(4)智能家居:智能电视、智能音响等。
4. 实验操作(1)使用键盘和鼠标进行文字输入、图片编辑等操作;(2)使用触摸屏进行手机操作、平板电脑操作等;(3)使用语音识别进行语音输入、语音控制等;(4)使用VR设备进行虚拟现实体验。
四、实验步骤:1. 了解人机交互技术的基本概念和发展历程;2. 学习人机交互技术的基本原理和方法;3. 熟悉人机交互技术的应用领域和案例;4. 实验操作,亲身体验人机交互技术;5. 分析实验结果,总结实验心得。
五、实验结果与分析:1. 通过实验,了解了人机交互技术的基本概念和发展历程;2. 掌握了人机交互技术的基本原理和方法,如输入设备、输出设备、交互模型等;3. 熟悉了人机交互技术的应用领域和案例,如桌面操作系统、移动设备、虚拟现实等;4. 在实验操作过程中,亲身体验了人机交互技术的便捷性和实用性;5. 通过分析实验结果,认识到人机交互技术在提高工作效率、改善用户体验、推动产业发展等方面的重要作用。
人机交互虚拟现实用户体验实验报告

人机交互虚拟现实用户体验实验报告引言:人机交互虚拟现实(VR)技术的快速发展使得用户体验在设计和评估中变得至关重要。
本实验旨在通过对一组参与者进行虚拟现实体验,评估其在用户界面和交互中的感受和满意度,以便改进与人机交互相关的设计和开发。
方法:1. 实验目标本实验的目标是评估用户在进行虚拟现实体验时的感知和情感反应,以及他们的满意度和参与度。
2. 实验设备一台高性能电脑,一台虚拟现实头戴显示设备,一台游戏控制器。
3. 实验流程3.1 参与者准备:向参与者提供实验背景和目的的简要介绍,并进行必要的问卷调查和签署同意书。
3.2 设备设置:根据参与者的个人特征和需求,正确设置并调整头戴显示设备和控制器。
3.3 实验任务:参与者将进行一系列的虚拟现实场景探索,包括观赏景点、解谜游戏等。
3.4 数据收集:通过观察、记录参与者在体验过程中的反应和行为,并定期进行问卷调查来收集数据。
3.5 结果分析:对收集到的数据进行主观和客观的分析,包括情感反应、体验满意度等。
结果:1. 参与者反馈参与者普遍对虚拟现实体验表示满意,认为其提供了身临其境般的感觉。
他们对虚拟场景的图像质量和真实感表示肯定,也对交互性能和操作方式给予了较高的评价。
2. 感知和情感反应参与者在体验过程中,表现出明显的情感反应。
他们的脸部表情、身体姿势和语言表达反映了他们的惊喜、兴奋、改变心情等。
3. 体验满意度评估通过问卷调查分析,参与者对虚拟现实体验的满意度评分较高。
他们普遍认为虚拟现实技术为他们带来了全新的体验,提供了更强烈的参与感和乐趣。
讨论:1. 优点本实验结果表明,人机交互虚拟现实技术在用户体验方面具有明显的优势。
虚拟现实技术的高度仿真性和沉浸感使得用户可以更好地参与其中,提升用户体验。
2. 展望虚拟现实技术的发展逐渐成熟,未来可以在更广泛的领域中应用,包括教育、娱乐、医疗等。
同时,针对虚拟现实体验的用户界面设计和交互方式也需要进一步优化,以满足不同用户的需求和期望。
人机交互用户界面设计实验报告

人机交互用户界面设计实验报告实验报告:人机交互用户界面设计一、引言人机交互用户界面设计是指将人与计算机之间的交互过程和界面设计有机结合,使用户能够更加便捷地操作计算机系统。
本实验主要针对用户界面设计进行研究,通过设计和实现一个实用的用户界面,评估其可用性和用户满意度,以进一步提升系统的用户体验。
二、实验目的1.掌握常用的用户界面设计原则和方法;2.通过实践设计一个简单的用户界面;3.评估用户界面的可用性和用户满意度。
三、实验方法1.研究用户界面设计的原则和方法;2.分析用户界面设计所需的功能和需求;3.设计和实现用户界面;4.进行实验测试,收集用户反馈和评估数据;5.分析结果并提出改进建议。
四、实验过程1.研究用户界面设计的原则和方法在研究过程中,我们发现了以下几点重要原则:-简洁性:用户界面应该简单明了,尽量减少冗余信息;-一致性:界面设计要保持一致性,具有可预测性,减少用户的学习成本;-可触达性:界面元素要易于触达和点击,方便用户进行操作;-可反馈性:用户操作后,界面应该及时给出反馈,告知用户操作是否成功;-可控性:用户界面要提供足够的操作控制权给用户。
2.分析用户界面设计所需的功能和需求我们选择设计一个音乐播放器的用户界面,通过分析用户需求,我们找到了以下几个主要功能:-播放/暂停:用户可以通过点击按钮或者按下快捷键来控制播放或暂停音乐;-上一首/下一首:用户可以切换到上一首或下一首音乐;-音量控制:用户可以通过滑动滑块来调节音量大小;-播放列表:用户可以在播放列表中选择需要播放的音乐;-音乐进度控制:用户可以通过拖动滑块来控制音乐的播放进度;-歌词显示:提供歌词显示功能,使用户更好地了解歌曲歌词内容。
3.设计和实现用户界面根据以上功能和需求,我们设计了一个简洁明了的用户界面,界面上有一个播放/暂停按钮、上一首/下一首按钮、音量调节滑块、播放列表选项、音乐进度控制滑块和歌词显示区域。
4.进行实验测试,收集用户反馈和评估数据我们通过实验室内部调查的方式,邀请一些用户来测试我们设计的用户界面。
人机交互技术课后实验报告

人机交互技术课后实验报告一、实验目的本次人机交互技术课程的实验旨在加深学生对理论知识的理解,并通过实践操作掌握人机交互的基本方法和技巧。
通过对人机交互界面的设计、实现和评估,培养学生的创新思维和解决实际问题的能力。
二、实验内容1. 界面设计:根据给定的交互场景,设计一个用户友好的人机交互界面。
2. 技术实现:使用编程语言和交互设计工具,将设计转化为实际的交互系统。
3. 系统评估:通过用户测试,收集反馈信息,评估交互系统的有效性和用户体验。
三、实验过程1. 设计阶段:首先,我们根据实验要求,分析用户需求和使用场景,确定界面布局、交互流程和功能需求。
在设计过程中,我们充分考虑了用户的易用性和界面的美观性。
2. 实现阶段:我们选用了Python语言和Tkinter库来实现交互界面。
通过编写代码,我们实现了界面的布局、事件处理和数据交互等功能。
3. 评估阶段:在系统实现后,我们邀请了多位用户进行测试,并收集了他们的使用反馈。
根据用户的意见,我们对界面进行了优化,提高了系统的易用性和交互效率。
四、实验结果通过本次实验,我们成功设计并实现了一个人机交互系统。
系统界面简洁明了,功能齐全,用户反馈良好。
在评估过程中,我们发现并解决了一些设计和实现中的问题,进一步提升了系统的用户体验。
五、实验总结本次实验不仅巩固了我们在人机交互技术方面的理论知识,而且提高了我们的实践操作能力。
通过设计、实现和评估交互系统,我们更加深刻地理解了人机交互的重要性和复杂性。
在未来的学习和工作中,我们将继续探索和实践,以期达到更高的专业水平。
六、实验建议为了进一步提高实验效果,我们建议:1. 在设计阶段,可以采用更多的用户研究方法,更深入地了解用户需求。
2. 在实现阶段,可以尝试使用更多的编程语言和工具,以适应不同的交互场景。
3. 在评估阶段,可以引入更多的定量分析方法,更准确地评估系统的性能。
七、参考文献[1] 人机交互设计原理与实践. 张三,李四. 电子工业出版社,2020.[2] 用户体验的度量与评估. 王五. 清华大学出版社,2019.八、附录附录中包含实验过程中使用的所有代码、界面设计图和用户测试反馈表格等相关资料。
人机交互_实验报告

一、实验名称:人机交互技术实验二、实验目的:1. 理解人机交互的基本概念、原理和方法。
2. 掌握常用的人机交互界面设计方法和技巧。
3. 提高动手实践能力,培养创新思维。
三、实验器材:1. 计算机2. 实验指导书3. 实验软件(如Photoshop、Sketch等)四、实验原理:人机交互技术是研究人与计算机之间信息交换和交互作用的一门学科。
实验主要围绕以下几个方面展开:1. 人机交互的基本概念和原理;2. 人机交互界面设计的基本方法和技巧;3. 常用的人机交互技术,如图形用户界面、语音识别、手势识别等。
五、实验内容与过程:1. 人机交互基本概念和原理的学习(1)阅读实验指导书,了解人机交互的基本概念和原理;(2)分析人机交互过程中的主要问题,如输入、输出、反馈等;(3)总结人机交互设计的基本原则,如一致性、简洁性、易用性等。
2. 人机交互界面设计方法与技巧的学习(1)学习图形用户界面设计的基本方法和技巧;(2)通过案例分析,了解优秀的人机交互界面设计;(3)练习使用Photoshop、Sketch等软件进行界面设计。
3. 常用的人机交互技术实践(1)学习语音识别技术的基本原理和应用;(2)学习手势识别技术的基本原理和应用;(3)结合实际项目,运用所学技术进行人机交互设计。
六、实验结果与分析:1. 通过学习,掌握了人机交互的基本概念、原理和方法;2. 掌握了图形用户界面设计的基本方法和技巧,能够独立完成界面设计;3. 了解并掌握了语音识别、手势识别等常用的人机交互技术;4. 在实际项目中,能够运用所学技术进行人机交互设计。
七、实验总结:本次实验使我对人机交互技术有了更深入的了解,掌握了人机交互界面设计的基本方法和技巧,提高了动手实践能力。
在今后的学习和工作中,我会继续关注人机交互技术的发展,将所学知识运用到实际项目中,为用户提供更加便捷、高效的人机交互体验。
同时,我也认识到人机交互技术仍有许多待解决的问题,如提高交互的自然性、智能性等,这将是我今后努力的方向。
人机交互实验分析报告

人机交互实验分析报告
一、实验介绍
实验选择的设备是智能手机。
实验采用改变界面尺寸的方式来检验用户体验和交互行为。
实验组为宽屏尺寸,研究组为窄屏尺寸,实验执行时间为7天,受试者共计30人,每组15人,实验在室内环境下进行。
二、实验结果
1.用户体验
实验结果显示,用户体验在窄屏尺寸中要比在宽屏尺寸中明显降低。
当用户使用窄屏时,他们会感到焦虑和困倦,会有更多的操作失误,这些都会影响用户体验。
2.用户行为
实验结果显示,用户在宽屏尺寸中的操作时间明显短于窄屏尺寸,同时用户的错误率在窄屏尺寸中也明显提高。
这样表明,在窄屏尺寸中,用户操作的质量要比在宽屏尺寸中低得多,易出错。
三、结论
从本次人机交互实验来看,界面尺寸变化会明显影响用户的体验和交互行为。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字媒体学院上机实验报告I八、附录LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {HDC hdc ;PAINTSTRUCT ps ;RECT rect ;switch (message){case WM_CREATE:PlaySound (TEXT ("123.wav"), NULL, SND_FILENAME | SND_ASYNC) ;return 0 ;case WM_PAINT:hdc = BeginPaint (hwnd, &ps) ;GetClientRect (hwnd, &rect) ;DrawText (hdc, TEXT ("Hello, Windows 7!"), -1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;EndPaint (hwnd, &ps) ;return 0 ;case WM_DESTROY:PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ;}运行结果截图:上机实验报告II八、附录LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {static TCHAR szBuffer[8]=TEXT("船有20米长。
");TEXTMETRIC tm;static int cxChar,cyChar;static POINT BoatFigure[4]static int cxClient, cyClient ;HDC hdc ;int i,j ;PAINTSTRUCT ps ;POINT Boat[4] ;static int CloudFigure[12][4];int Cloud[12][4];static POINT PoleFigure[4];POINT Pole[4];static POINT FlagFigure[3];POINT Flag[3];static int BubbleFigure[3][4]int Bubble[3][4];static POINT ArrowFigure[4][3];POINT Arrow[4][3];HBRUSH hOrangeBrush,hBlueBrush,hBrownBrush,hRedBrush;switch (message){case WM_SIZE:cxClient = LOWORD (lParam) ;cyClient = HIWORD (lParam) ;return 0 ;//////////////////////////////////////////case WM_PAINT:hdc = BeginPaint (hwnd, &ps) ;GetTextMetrics(hdc,&tm);cxChar=tm.tmAveCharWidth;cyChar=tm.tmHeight+tm.tmExternalLeading;SetMapMode(hdc,MM_ISOTROPIC);SetWindowExtEx(hdc,cxClient/2,cyClient/2,NULL);SetViewportExtEx(hdc,cxClient/2,-cyClient/2,NULL);SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL);for(i=0;i<4;i++){Boat[i].x=cxClient*BoatFigure[i].x/70;Boat[i].y=cyClient*BoatFigure[i].y/40;Pole[i].x=cxClient*PoleFigure[i].x/140;Pole[i].y=cyClient*PoleFigure[i].y/40;}for(i=0;i<3;i++){Flag[i].x=cxClient*FlagFigure[i].x/70;Flag[i].y=cyClient*FlagFigure[i].y/40;}for(i=0;i<3;i++){Bubble[i][0]= cxClient*BubbleFigure[i][0]/70;Bubble[i][1]= cyClient*BubbleFigure[i][1]/40;Bubble[i][2]= cxClient*BubbleFigure[i][2]/70;Bubble[i][3]= cyClient*BubbleFigure[i][3]/40;}for(i=0;i<12;i++){Cloud[i][0]= cxClient*CloudFigure[i][0]/70;Cloud[i][1]= cyClient*CloudFigure[i][1]/40;Cloud[i][2]= cxClient*CloudFigure[i][2]/70;Cloud[i][3]= cyClient*CloudFigure[i][3]/40;}for(i=0;i<4;i++)for(j=0;j<3;j++){Arrow[i][j].x=cxClient*ArrowFigure[i][j].x/140;Arrow[i][j].y=cyClient*ArrowFigure[i][j].y/80;}SelectObject (hdc, hBlueBrush) ;SetPolyFillMode (hdc, ALTERNATE) ;for(i=0;i<11;i++)Ellipse(hdc,Cloud[i][0],Cloud[i][1],Cloud[i][2],Cloud[i][3]);for(i=0;i<3;i++)Ellipse(hdc,Bubble[i][0],Bubble[i][1],Bubble[i][2],Bubble[i][3]);SelectObject (hdc,GetStockObject(NULL_PEN));Ellipse(hdc,Cloud[11][0],Cloud[11][1],Cloud[11][2],Cloud[11][3]);DeleteObject(hBlueBrush);SelectObject (hdc, hOrangeBrush) ;Polygon (hdc, Boat, 4);DeleteObject(hOrangeBrush);SelectObject(hdc,hBrownBrush);Polygon(hdc,Pole,4);DeleteObject(hBrownBrush);SelectObject(hdc,hRedBrush);Polygon(hdc,Flag,3);DeleteObject(hRedBrush);SelectObject(hdc,GetStockObject(BLACK_BRUSH));for(i=0;i<4;i++)Polygon(hdc,Arrow[i],3);SelectObject(hdc,GetStockObject(BLACK_PEN));MoveToEx(hdc,cxClient*(-29)/70,0,NULL);LineTo(hdc,cxClient*24/70,0);MoveToEx(hdc,0,cyClient*18/40,NULL);LineTo(hdc,0,cyClient*(-16)/40);MoveToEx(hdc,cxClient*(-14)/70,cyClient*(-3)/40,NULL);LineTo(hdc,cxClient*(-14)/70,cyClient*(-19)/40);MoveToEx(hdc,cxClient*18/70,cyClient*(-3)/40,NULL);LineTo(hdc,cxClient*18/70,cyClient*(-19)/40);MoveToEx(hdc,cxClient*(-14)/70,cyClient*(-18)/40,NULL);LineTo(hdc,cxClient*18/70,cyClient*(-18)/40);SetTextColor(hdc,RGB(255,66,67));TextOut(hdc,-3*cxChar,cyClient*(-18)/40+cyChar,szBuffer,lstrlen(szBuffer)); EndPaint(hwnd, &ps) ;return 0 ;////////////////////////////case WM_DESTROY:PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ;}运行结果截图:上机实验报告III八、附录LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {static DWORD dwCharSet = DEFAULT_CHARSET ;static int cxChar, cyChar, cxClient, cyClient, cxBuffer, cyBuffer,xCaret, yCaret ;static TCHAR * pBuffer = NULL ;HDC hdc ;int x, y, i ;PAINTSTRUCT ps ;TEXTMETRIC tm ;switch (message){case WM_INPUTLANGCHANGE:dwCharSet = wParam ;// fall throughcase WM_CREATE:hdc = GetDC (hwnd) ;SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,dwCharSet, 0, 0, 0, FIXED_PITCH, NULL)) ;GetTextMetrics (hdc, &tm) ;cxChar = tm.tmAveCharWidth ;cyChar = tm.tmHeight ;DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT))) ;ReleaseDC (hwnd, hdc) ;// fall through case WM_SIZE:// obtain window size in pixelsif (message == WM_SIZE){cxClient = LOWORD (lParam) ;cyClient = HIWORD (lParam) ;}// calculate window size in characterscxBuffer = max (1, cxClient / cxChar) ;cyBuffer = max (1, cyClient / cyChar) ;// allocate memory for buffer and clear itif (pBuffer != NULL)free (pBuffer) ;pBuffer = (TCHAR *) malloc (cxBuffer * cyBuffer * sizeof (TCHAR)) ;for (y = 0 ; y < cyBuffer ; y++)for (x = 0 ; x < cxBuffer ; x++)BUFFER(x,y) = ' ' ;// set caret to upper left cornerxCaret = 0 ;yCaret = 0 ;if (hwnd == GetFocus ())SetCaretPos (xCaret * cxChar, yCaret * cyChar) ; InvalidateRect (hwnd, NULL, TRUE) ;return 0 ;case WM_SETFOCUS:// create and show the caretCreateCaret (hwnd, NULL, cxChar, cyChar) ;SetCaretPos (xCaret * cxChar, yCaret * cyChar) ;ShowCaret (hwnd) ;return 0 ;case WM_KILLFOCUS:// hide and destroy the caretHideCaret (hwnd) ;DestroyCaret () ;return 0 ;case WM_KEYDOWN:switch (wParam){case VK_HOME:xCaret = 0 ;break ;case VK_END:xCaret = cxBuffer - 1 ;break ;case VK_PRIOR:yCaret = 0 ;break ;case VK_NEXT:yCaret = cyBuffer - 1 ;break ;case VK_LEFT:xCaret = max (xCaret - 1, 0) ;break ;case VK_RIGHT:xCaret = min (xCaret + 1, cxBuffer - 1) ;break ;case VK_UP:yCaret = max (yCaret - 1, 0) ;break ;case VK_DOWN:yCaret = min (yCaret + 1, cyBuffer - 1) ;break ;case VK_DELETE:for (x = xCaret ; x < cxBuffer - 1 ; x++)BUFFER (x, yCaret) = BUFFER (x + 1, yCaret) ;BUFFER (cxBuffer - 1, yCaret) = ' ' ;HideCaret (hwnd) ;hdc = GetDC (hwnd) ;SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,dwCharSet, 0, 0, 0, FIXED_PITCH, NULL)) ;TextOut (hdc, xCaret * cxChar, yCaret * cyChar,& BUFFER (xCaret, yCaret),cxBuffer - xCaret) ;DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT))) ; ReleaseDC (hwnd, hdc) ;ShowCaret (hwnd) ;break ;}SetCaretPos (xCaret * cxChar, yCaret * cyChar) ;return 0 ;case WM_CHAR:for (i = 0 ; i < (int) LOWORD (lParam) ; i++){switch (wParam){case'\b': // backspaceif (xCaret > 0){xCaret-- ;SendMessage (hwnd, WM_KEYDOWN, VK_DELETE, 1) ;}break ;case'\t': // tabdo{SendMessage (hwnd, WM_CHAR, ' ', 1) ;}while (xCaret % 8 != 0) ;break ;case'\n': // line feedif (++yCaret == cyBuffer)yCaret = 0 ;break ;case'\r': // carriage returnxCaret = 0 ;if (++yCaret == cyBuffer)yCaret = 0 ;break ;case'\x1B': // escapefor (y = 0 ; y < cyBuffer ; y++)for (x = 0 ; x < cxBuffer ; x++)BUFFER (x, y) = ' ' ;xCaret = 0 ;yCaret = 0 ;InvalidateRect (hwnd, NULL, FALSE) ;break ;default: // character codesBUFFER (xCaret, yCaret) = (TCHAR) wParam ;HideCaret (hwnd) ;hdc = GetDC (hwnd) ;SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,dwCharSet, 0, 0, 0, FIXED_PITCH, NULL)) ;TextOut (hdc, xCaret * cxChar, yCaret * cyChar,& BUFFER (xCaret, yCaret), 1) ;DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT))) ;ReleaseDC (hwnd, hdc) ;ShowCaret (hwnd) ;if (++xCaret == cxBuffer){xCaret = 0 ;if (++yCaret == cyBuffer)yCaret = 0 ;}break ;}}SetCaretPos (xCaret * cxChar, yCaret * cyChar) ;return 0 ;case WM_PAINT:hdc = BeginPaint (hwnd, &ps) ;SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,dwCharSet, 0, 0, 0, FIXED_PITCH, NULL)) ;for (y = 0 ; y < cyBuffer ; y++)TextOut (hdc, 0, y * cyChar, & BUFFER(0,y), cxBuffer) ;DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT))) ;EndPaint (hwnd, &ps) ;上机实验报告IV八、附录LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){static COLORREF crPrim[3] = { RGB (255, 0, 0), RGB (0, 255, 0),RGB (0, 0, 255) } ;static HBRUSH hBrush[3], hBrushStatic ;static HWND hwndScroll[3], hwndLabel[3], hwndValue[3], hwndRect ;static int color[3], cyChar ;static RECT rcColor ;static TCHAR * szColorLabel[] = { TEXT ("Red"), TEXT ("Green"),TEXT ("Blue") } ;HINSTANCE hInstance ;int i, cxClient, cyClient ;TCHAR szBuffer[10] ;switch (message){case WM_CREATE :hInstance = (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE) ;hwndRect = CreateWindow (TEXT ("static"), NULL,WS_CHILD | WS_VISIBLE | SS_WHITERECT,0, 0, 0, 0,hwnd, (HMENU) 9, hInstance, NULL) ;for (i = 0 ; i < 3 ; i++){hwndScroll[i] = CreateWindow (TEXT ("scrollbar"), NULL,WS_CHILD | WS_VISIBLE |WS_TABSTOP | SBS_VERT,0, 0, 0, 0,hwnd, (HMENU) i, hInstance, NULL) ;SetScrollRange (hwndScroll[i], SB_CTL, 0, 255, FALSE) ;SetScrollPos (hwndScroll[i], SB_CTL, 0, FALSE) ;hwndLabel [i] = CreateWindow (TEXT ("static"), szColorLabel[i],WS_CHILD | WS_VISIBLE | SS_CENTER,0, 0, 0, 0,hwnd, (HMENU) (i + 3),hInstance, NULL) ;hwndValue [i] = CreateWindow (TEXT ("static"), TEXT ("0"),WS_CHILD | WS_VISIBLE | SS_CENTER,0, 0, 0, 0,hwnd, (HMENU) (i + 6),hInstance, NULL) ;OldScroll[i] = (WNDPROC) SetWindowLong (hwndScroll[i],GWL_WNDPROC, (LONG) ScrollProc) ;hBrush[i] = CreateSolidBrush (crPrim[i]) ;}hBrushStatic = CreateSolidBrush (GetSysColor (COLOR_BTNHIGHLIGHT)) ;cyChar = HIWORD (GetDialogBaseUnits ()) ;return 0 ;case WM_SIZE :cxClient = LOWORD (lParam) ;cyClient = HIWORD (lParam) ;SetRect (&rcColor, cxClient / 2, 0, cxClient, cyClient) ;MoveWindow (hwndRect, 0, 0, cxClient / 2, cyClient, TRUE) ;for (i = 0 ; i < 3 ; i++){MoveWindow (hwndScroll[i],(2 * i + 1) * cxClient / 14, 2 * cyChar,cxClient / 14, cyClient - 4 * cyChar, TRUE) ; MoveWindow (hwndLabel[i],(4 * i + 1) * cxClient / 28, cyChar / 2,cxClient / 7, cyChar, TRUE) ;MoveWindow (hwndValue[i],(4 * i + 1) * cxClient / 28,cyClient - 3 * cyChar / 2,cxClient / 7, cyChar, TRUE) ;}SetFocus (hwnd) ;return 0 ;case WM_SETFOCUS :SetFocus (hwndScroll[idFocus]) ;return 0 ;case WM_VSCROLL :i = GetWindowLong ((HWND) lParam, GWL_ID) ;switch (LOWORD (wParam)){case SB_PAGEDOWN :color[i] += 15 ;case SB_LINEDOWN :color[i] = min (255, color[i] + 1) ;break ;case SB_PAGEUP :color[i] -= 15 ;case SB_LINEUP :color[i] = max (0, color[i] - 1) ;break ;case SB_TOP :color[i] = 0 ;break ;case SB_BOTTOM :color[i] = 255 ;break ;case SB_THUMBPOSITION :case SB_THUMBTRACK :color[i] = HIWORD (wParam) ;break ;default :break ;}SetScrollPos (hwndScroll[i], SB_CTL, color[i], TRUE) ;wsprintf (szBuffer, TEXT ("%i"), color[i]) ;SetWindowText (hwndValue[i], szBuffer) ;DeleteObject ((HBRUSH)SetClassLong (hwnd, GCL_HBRBACKGROUND, (LONG)CreateSolidBrush (RGB (color[0], color[1], color[2])))) ; InvalidateRect (hwnd, &rcColor, TRUE) ;return 0 ;case WM_CTLCOLORSCROLLBAR :i = GetWindowLong ((HWND) lParam, GWL_ID) ;return (LRESULT) hBrush[i] ;case WM_CTLCOLORSTATIC :i = GetWindowLong ((HWND) lParam, GWL_ID) ;if (i >= 3 && i <= 8) // static text controls{SetTextColor ((HDC) wParam, crPrim[i % 3]) ;SetBkColor ((HDC) wParam, GetSysColor (COLOR_BTNHIGHLIGHT));return (LRESULT) hBrushStatic ;}break ;case WM_SYSCOLORCHANGE :DeleteObject (hBrushStatic) ;hBrushStatic = CreateSolidBrush (GetSysColor (COLOR_BTNHIGHLIGHT)) ;return 0 ;case WM_DESTROY :DeleteObject ((HBRUSH)SetClassLong (hwnd, GCL_HBRBACKGROUND, (LONG)GetStockObject (WHITE_BRUSH))) ;for (i = 0 ; i < 3 ; i++)DeleteObject (hBrush[i]) ;DeleteObject (hBrushStatic) ;PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ;}LRESULT CALLBACK ScrollProc (HWND hwnd, UINT message,WPARAM wParam, LPARAM lParam){int id = GetWindowLong (hwnd, GWL_ID) ;switch (message){case WM_KEYDOWN :if (wParam == VK_TAB)SetFocus (GetDlgItem (GetParent (hwnd),(id + (GetKeyState (VK_SHIFT) < 0 ? 2 : 1)) % 3)) ;break ;case WM_SETFOCUS :idFocus = id ;break ;}return CallWindowProc (OldScroll[id], hwnd, message, wParam, lParam) ; }运行结果截图:八、附录int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){HWND hwnd ;MSG msg ;WNDCLASS wndclass ;HMENU hMenu;hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1));wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;wndclass.lpszMenuName = szAppName;wndclass.lpszClassName = szAppName ;if (!RegisterClass (&wndclass)){MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ;return 0 ;}hwnd = CreateWindow (szAppName, TEXT ("Desktop"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL,hMenu, hInstance, NULL) ;/* hMenu=CreateMenu();hMenuPopup=CreateMenu();AppendMenu(hMenuPopup,MF_STRING,IDM_SHOW_NORMAL,TEXT("NORMAL"));AppendMenu(hMenuPopup,MF_STRING,IDM_SHOW_REVERSE,TEXT("REVERSE"));AppendMenu(hMenu,MF_POPUP,(UINT_PTR)hMenuPopup,TEXT("SHOW"));*/ShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg) ;DispatchMessage (&msg) ;}return msg.wParam ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {static int cxClient, cyClient, cxSource, cySource ;HDC hdcClient, hdcWindow ;PAINTSTRUCT ps ;HMENU hMenu;static BOOL stretched=TRUE,iscxClientlong=TRUE;static int iSelection =ID_40001,iSelection2=ID_40007;switch (message){case WM_COMMAND:hMenu=GetMenu(hwnd);switch (LOWORD(wParam)){case ID_40001:CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;iSelection = LOWORD (wParam) ;CheckMenuItem (hMenu, iSelection, MF_CHECKED) ;iCurrent=0;InvalidateRect (hwnd, NULL, TRUE) ;return 0;case ID_40002:CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;iSelection = LOWORD (wParam) ;CheckMenuItem (hMenu, iSelection, MF_CHECKED) ;iCurrent=1;InvalidateRect (hwnd, NULL, TRUE) ;return 0;case ID_40003:CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;iSelection = LOWORD (wParam) ;CheckMenuItem (hMenu, iSelection, MF_CHECKED) ;iCurrent=2;InvalidateRect (hwnd, NULL, TRUE) ;return 0;case ID_40004:CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;iSelection = LOWORD (wParam) ;CheckMenuItem (hMenu, iSelection, MF_CHECKED) ;iCurrent=3;InvalidateRect (hwnd, NULL, TRUE) ;return 0;case ID_40007:CheckMenuItem (hMenu, iSelection2, MF_UNCHECKED) ;iSelection2 = LOWORD (wParam) ;CheckMenuItem (hMenu, iSelection2, MF_CHECKED) ;stretched=TRUE;InvalidateRect (hwnd, NULL, TRUE) ;return 0;case ID_40008:CheckMenuItem (hMenu, iSelection2, MF_UNCHECKED) ;iSelection2 = LOWORD (wParam) ;CheckMenuItem (hMenu, iSelection2, MF_CHECKED) ;stretched=FALSE;InvalidateRect(hwnd, NULL, TRUE) ;return 0;}break;case WM_SIZE:cxClient = LOWORD (lParam) ;cyClient = HIWORD (lParam) ;iscxClientlong=cxClient>(cyClient*cxDesktop/cyDesktop)?TRUE:FALSE; modeorginal[0][0]=0;modeorginal[0][1]=0;modeorginal[0][2]=cxClient;modeorginal[0][3]=cy Client;modeorginal[1][0]=cxClient;modeorginal[1][1]=0;modeorginal[1][2]=-cxClient;modeorginal[ 1][3]=cyClient;modeorginal[2][0]=0;modeorginal[2][1]=cyClient;modeorginal[2][2]=cxClient;modeorginal[2 ][3]=-cyClient;modeorginal[3][0]=cxClient;modeorginal[3][1]=cyClient;modeorginal[3][2]=-cxClient;modeo rginal[3][3]=-cyClient;return 0 ;case WM_PAINT:hdcClient = BeginPaint (hwnd, &ps) ;hdcWindow = GetWindowDC (GetDesktopWindow()) ;if(stretched){for(int i=0;i<4;i++)mode[i]=modeorginal[iCurrent][i];}else{for(int i=0;i<4;i++)mode[i]=modeorginal[iCurrent][i];switch(iCurrent){case 0:if(iscxClientlong){mode[2]=mode[3]*cxDesktop/cyDesktop; }else{mode[3]=mode[2]*cyDesktop/cxDesktop; }break;case 1:if(iscxClientlong){mode[2]=-mode[3]*cxDesktop/cyDesktop;mode[0]=-mode[2];}else{mode[3]=-mode[2]*cyDesktop/cxDesktop; }break;case 2:if(iscxClientlong){mode[2]=-mode[3]*cxDesktop/cyDesktop; }else{mode[3]=-mode[2]*cyDesktop/cxDesktop;mode[1]=-mode[3];}break;case 3:if(iscxClientlong){mode[2]=mode[3]*cxDesktop/cyDesktop;mode[0]=-mode[2];}else{mode[3]=mode[2]*cyDesktop/cxDesktop;mode[1]=-mode[3];}break;}显示方式更改为等比:31。