您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Windows程序设计课件第七章
1第七讲Windows界面编程-3主讲:何军2011-秋季学期2Refreshing•GDI与设备环境•基本的绘图函数3Outline•Windows界面编程的综合实验•WindowsDC使用的双缓冲技术41.界面编程综合实验51.1实验要求•带有指针的能够正常运行的时钟•时针、分针、秒针61.2关键问题•什么因素驱动时钟运行?•如何绘制时钟表面?•如何动态刷新时钟的秒针、分针、时针?71.2关键问题•什么因素驱动时钟运行?•Windows消息——WM_TIMER,定时器消息•Windows的系统时间81.2关键问题•如何绘制时钟表面?•为了方便绘制圆形表盘,将坐标映射方式改为MM_ISOTROPIC•设置坐标原点为客户区中心位置91.2关键问题•如何动态刷新时钟的秒针、分针、时针?•屏幕全部重新绘制•仅绘制变更的部分101.3关键代码•定时器消息#defineIDT_CLOCK1//创建定时器::SetTimer(hWnd,IDT_CLOCK,1000,NULL);caseWM_TIMER:{//下面填写定时器代码return0;}111.3关键代码•改变坐标映射voidSetIsotropic(HDChdc,intcx,intcy){::SetMapMode(hdc,MM_ISOTROPIC);::SetWindowExtEx(hdc,1000,1000,NULL);::SetViewportExtEx(hdc,cx,-cy,NULL);::SetViewportOrgEx(hdc,cx/2,cy/2,NULL);}//建立坐标系HDChdc=::GetDC(hWnd);SetIsotropic(hdc,s_cxClient,s_cyClient);121.3关键代码•绘制表针voidDrawHand(HDChdc,intnLength,intnWidth,intnDegrees,COLORREFclrColor){//将角度nDegrees转化成弧度.2*3.1415926/360==0.0174533doublenRadians=(double)nDegrees*0.0174533;//计算坐标POINTpt[2];pt[0].x=(int)(nLength*sin(nRadians));pt[0].y=(int)(nLength*cos(nRadians));pt[1].x=-pt[0].x/5;pt[1].y=-pt[0].y/5;//创建画笔,并选如DC结构中HPENhPen=::CreatePen(PS_SOLID,nWidth,clrColor);HPENhOldPen=(HPEN)::SelectObject(hdc,hPen);//画线::MoveToEx(hdc,pt[0].x,pt[0].y,NULL);::LineTo(hdc,pt[1].x,pt[1].y);::SelectObject(hdc,hOldPen);::DeleteObject(hPen);}DrawHand(hdc,400,1,time.wSecond*6,RGB(0,0,0));DrawHand(hdc,400,6,time.wMinute*6,RGB(0,0,0));DrawHand(hdc,200,8,time.wHour*30+time.wMinute/2,RGB(0,0,0));秒针分针时针131.3关键代码•动态刷新时钟指针wcex.hbrBackground=(HBRUSH)(COLOR_3DFACE+1);caseWM_TIMER:{//以COLOR_3DFACE为背景色就可以擦除指针了(因为窗口的背景色也是COLOR_3DFACE)COLORREFcrfColor=::GetSysColor(COLOR_3DFACE);//如果秒改变的话就擦除秒针,然后重画所有指针if(time.wSecond!=s_nPreSecond){//擦除秒针DrawHand(hdc,400,1,s_nPreSecond*6,crfColor);//重画所有指针DrawHand(hdc,400,1,time.wSecond*6,RGB(0,0,0));DrawHand(hdc,200,8,time.wHour*30+time.wMinute/2,RGB(0,0,0));DrawHand(hdc,400,6,time.wMinute*6,RGB(0,0,0));s_nPreSecond=time.wSecond;}return0;}141.4调试分析•问题:•WM_TIMER与WM_PAINT有什么相似之处?为什么要这样设计?15对实验进行改造•数字式时钟•将该程序改造为一个数字时钟,包括时:分:秒162.DC的双缓冲技术172.1内存DC•默认的DC指的是与显示屏幕适配的DC•Windows赋予开发者在内存中创建DC的能力——内存DC182.1内存DC•DC与Bitmap•Windows可以根据屏幕DC的参数,创造出一个与当前屏幕DC兼容的Bitmap(位图)——该Bitmap相当于DC所适配的屏幕•根据该Bitmap,Windows可构造出一个与该Bitmap相兼容的内存DC•此后,对内存DC的所有操作,实际上相当于在该Bitmap上进行输出192.2DC的双缓冲内存DC屏幕DC内存DC屏幕DC双缓冲技术能够显著提高图形的显示效率,减少闪烁20本节课小结21新的消息与API•新的消息•WM_TIMER、WM_CONTEXTMENU、WM_SYSCOMMAND、WM_SIZE•新的API•SetTimer、KillTimer、GetLocalTime、•GetSystemMenu、AppendMenu、TrackPopupMenu•SetWindowPos
本文标题:Windows程序设计课件第七章
链接地址:https://www.777doc.com/doc-3604696 .html