Windows实验报告
(计算机科学与技术学院 计112 1113022032 康照玲)
一、实验一
1、题目:在窗口上显示一个正方形内切圆,单击左键或者停顿5秒后显示正方形外接圆,在此之间交替显示。 2、关键代码分析
本次试验我是主要是实现定时5秒的转换,首先在创建窗口时设置定时器,在窗口函数中响应其信息,然后对设置的标志进行赋值,一次实现其定时功能。 关键代码如下: HDC hDC; //定义设备环境句柄. int x,y,z ; // 标志窗口处的坐标点 PAINTSTRUCT ps; //定义绘图结构体变量. static BOOL flag=TRUE; //标志定时功能 HBRUSH hBrush; // SetTimer(hWnd,1,2000,NULL); switch(iMessage) { case WM_CREATE: return 0; case WM_TIMER: flag=!flag;
InvalidateRect(hWnd,NULL,TRUE); return 0; case WM_PAINT: hDC = BeginPaint(hWnd,&ps); GetClientRect(hWnd,&Rect1); //获得用户区的尺寸 x=(Rect1.left+Rect1.right)/2; y=(Rect1.top+Rect1.bottom)/2 ; 计算屏幕中心的坐标,即图形的中心 z=min(x,y)-100; if(flag==TRUE) { Rectangle(hDC,x-z,y-z,x+z,y+z); hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,255)); SelectObject(hDC,hBrush); Ellipse(hDC,x-z,y-z,x+z,y+z); Sleep(1000); InvalidateRect(hWnd,NULL,1); //刷新用户区. DeleteObject(hBrush); } else { Ellipse(hDC,x-z,y-z,x+z,y+z);
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,255)); SelectObject(hDC,hBrush); Rectangle(hDC,x-(sqrt(2))/2*z,y-(sqrt(2))/2*z,x+(sqrt(2))/2*z,y+(sqrt(2))/2*z); InvalidateRect(hWnd,NULL,1);Sleep(1000); DeleteObject(hBrush); //刷新用户区. } flag=!flag; EndPaint(hWnd,&ps); break; 二、实验二
1、题目:请编写程序,要求如下:(1)、定义一只红色的画笔,绘制一个等边五边形。(2)、用不同颜色的线条连接互不相邻的两个点(3)、用不同颜色的画刷填充用上述方法所形成的图形中的每一个区域 2、关键代码分析 HDC hDC; //定义设备环境句柄. HBRUSH hBrush; //定义画刷句柄 HPEN hPen; //定义画笔句柄 PAINTSTRUCT PtStr; //定义包含绘图信息的结构体变量 double dfRadious0=100.0,dfRadious1; //定义外部和内部正五边形外接圆半径. POINT lpOuterPoints[5],lpInnerPoints[5];//定义外,内正五边形点结构数组. POINT lpTriangle[3]; //定义三角形点结构数组.
dfRadious1=dfRadious0*sin(0.1*Pi)/sin(126.0/180*Pi);//根据外圆半径计算内园半径. //计算内外正五边形的点坐标. for(int i=0;i<5;i++) { lpOuterPoints[i].x=(long)(dfRadious0*cos(i*72.0/180*Pi)); lpOuterPoints[i].y=(long)(dfRadious0*sin(i*72.0/180*Pi)); lpInnerPoints[i].x=(long)(dfRadious1*cos(i*72.0/180*Pi+36.0/180*Pi)); lpInnerPoints[i].y=(long)(dfRadious1*sin(i*72.0/180*Pi+36.0/180*Pi)); }
switch(iMessage) {
case WM_PAINT: //处理绘图消息. hDC=BeginPaint(hWnd,&PtStr); //得到设备环境句柄 SetMapMode(hDC,MM_ANISOTROPIC); //设置映射模式. SetWindowOrgEx(hDC,-100,-100,NULL); //设置坐标原点. hPen=CreatePen(PS_SOLID,1,RGB(255,0,0)); //创新红色画笔. SelectObject(hDC,hPen); //将画笔选入. Polygon(hDC,lpOuterPoints,5); //画正五边形. //填充正五边形的不同区域. for(int i=0;i<5;i++) {
lpTriangle[0]=lpOuterPoints[i%5]; //生成图形中的三角形区域的坐标. lpTriangle[1]=lpInnerPoints[i%5]; lpTriangle[2]=lpOuterPoints[(i+1)%5]; //创新新画刷. hBrush=CreateSolidBrush(RGB(i*10,i*20,i*30)); SelectObject(hDC,hBrush); //选入新画刷. Polygon(hDC,lpTriangle,3); //画三角形区域. lpTriangle[2]=lpInnerPoints[(i+4)%5]; //生成图形中的三角形区域的坐标. hBrush=CreateSolidBrush(RGB(i*1000,i*20,i*10));//创新画刷. SelectObject(hDC,hBrush); //选入画刷. Polygon(hDC,lpTriangle,3); //画三角形区域. } hBrush=CreateSolidBrush(RGB(255,0,255));//创新白画刷. SelectObject(hDC,hBrush); //选入画刷. Polygon(hDC,lpInnerPoints,5); //画中心的五边形. //用不同种颜色的画笔来绘制五角星. MoveToEx(hDC,lpOuterPoints[0].x,lpOuterPoints[0].y,NULL); for(int i=1;i<=5;i++) { hPen=CreatePen(PS_SOLID,1,RGB(0,i*51,0)); SelectObject(hDC,hPen); LineTo(hDC,lpOuterPoints[(i+2)%5].x,lpOuterPoints[(i+2)%5].y); } hPen=(HPEN)(GetStockObject(PS_NULL)); DeleteObject(hPen); //删除画笔. DeleteObject(hBrush); //删除画刷. EndPaint(hWnd,&PtStr); //结束绘图. return 0;
case WM_DESTROY: //处理关闭窗口信息. PostQuitMessage(0); //向应用程序发送WM_QUIT消息. return 0; default: return(DefWindowProc(hWnd,iMessage,wParam,lParam)); }
三、实验三
1、题目:设计一个窗口,在窗口中有五行文字,字体分别为楷体、宋体、仿宋体、黑体、幼圆,字号由8到40线性增长,每行的文字相继出现后不消失,而且每一行文字的颜色有RGB(0,0,0)到RGB(255,255,255)线性增长。点击左键后在工作区中每行文字由40到8线性减小,颜色有RGB(255,255,255)到RGB(0,0,0)线性减小。 2、关键代码分析 int a=0;
HDC hDC; //定义设备环境句柄.
HFONT hF; //定义字体句柄. PAINTSTRUCT ps; //定义包含绘图信息的结构体变量 TEXTMETRIC tm; //定义包含字体信息的结构体变量.
static char lpsz_1[]=\无边落木萧萧下,不尽长江滚滚来。\//定义输出的字符串. char chFont[20]; //定义字体种类的字符串. int X=0,Y=0,i;
static int nCharlen=strlen(lpsz_1); //定义字符串长度变量. switch(iMessage) {
case WM_PAINT: //处理绘图消息. hDC=BeginPaint(hWnd,&ps); //获得设备环境指针. for(i=0;i DeleteObject(hF); //删除字体句柄. } iFontSign++; //字体标志增加 InvalidateRect(hWnd,NULL,0);//刷新用户区. EndPaint(hWnd,&ps); //删除设备用户指针. return 0; break; case WM_LBUTTONDOWN: InvalidateRect(hWnd,NULL,1);//刷新用户区. iFontSign=0; for(;a<5;a++){ X=0;Y=0; hDC=BeginPaint(hWnd,&ps);//获得设备环境指针. for(i=0;i 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库Windows实验报告第一次实验在线全文阅读。
相关推荐: