为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

中国石油大学(华东)VC 实验5

2020-03-08 12页 doc 30KB 9阅读

用户头像

is_842972

暂无简介

举报
中国石油大学(华东)VC 实验5实验五 定时器编程实验 一、实验目的 (1) 熟悉Visual C++ 6.0 开发环境; (2) 掌握API 编程模式中定时器的使用方法 (3) 熟练掌握在Visual C++ 6.0 开发环境调试程序的方法。 二、实验内容 设计一个窗口,在窗口中间位置绘制一个红色粗实线的圆角矩形,并用交替使用三种不同样式的画刷填充矩形的内部,每次刷新的时间间隔为1.0 秒。    三、实验报告 (1) 列出定时器操作相关的程序清单; #include//包含应用程序中所需的数据类型和数据结构的定义 #include int nMode...
中国石油大学(华东)VC  实验5
实验五 定时器编程实验 一、实验目的 (1) 熟悉Visual C++ 6.0 开发环境; (2) 掌握API 编程模式中定时器的使用方法 (3) 熟练掌握在Visual C++ 6.0 开发环境调试程序的方法。 二、实验内容 一个窗口,在窗口中间位置绘制一个红色粗实线的圆角矩形,并用交替使用三种不同样式的画刷填充矩形的内部,每次刷新的时间间隔为1.0 秒。    三、实验 (1) 列出定时器操作相关的程序清单; #include//包含应用程序中所需的数据类型和数据结构的定义 #include int nMode; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //窗口函数 //--------------- 以下初始化窗口类 ---------------------- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) { HWND hwnd ; MSG Msg ; WNDCLASS wndclass ; //    LPCWSTR lpszClassName =_T("窗口");    //窗口类名 //    LPCWSTR lpszTitle=L"My_Windows";    //窗口标名 char lpszClassName[] = "窗口";    //窗口类名 char lpszTitle[]= "My_Windows";    //窗口标题名 //窗口类的定义 wndclass.style=0;        //窗口类型为缺省类型 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=NULL;    //窗口中无菜单 //wndclass.lpszClassName=(LPCWSTR) lpszClassName ; wndclass.lpszClassName=lpszClassName ; //窗口类名为"窗口" //--------------- 以下进行窗口类的注册 ------- if(!RegisterClass( &wndclass))//如果注册失败则发出警告 { MessageBeep(0) ;      return FALSE ;    } //---------------- 创建窗口 ------------------- hwnd=CreateWindow ( //        _T("Title"), lpszClassName,    //窗口类名 lpszTitle,        //窗口实例的标题名 WS_OVERLAPPEDWINDOW,    //窗口的风格 CW_USEDEFAULT, CW_USEDEFAULT,    //窗口左上角坐标为缺省值 CW_USEDEFAULT, CW_USEDEFAULT,    //窗口的高和宽为缺省值 NULL,            //此窗口无附窗口 NULL,            //此窗口无主菜单 hInstance,        //创建此窗口的应用程序的当前句柄 NULL             //不使用该值 ); //--------------- 显示窗口 ---------------------- ShowWindow( hwnd, nCmdShow) ; //-------------- 绘制用户区 --------------------- 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) { HDC hdc; HBRUSH hb; HPEN hp; PAINTSTRUCT ps;    static int state=0; static  int  TIMERID=1; switch (message) { case WM_CREATE: SetTimer(hWnd, TIMERID, 1000, NULL); break; case WM_TIMER: if(wParam==TIMERID) { state=state%3;  InvalidateRect(hWnd, NULL, TRUE); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); SetMapMode(hdc,MM_TEXT); hp=(HPEN)GetStockObject(BLACK_PEN); SelectObject(hdc,hp);         if(state==0) {          hb=CreateSolidBrush(RGB(255,0,0)); SelectObject(hdc,hb); RoundRect(hdc,400,120,700,420,15,15);          DeleteObject(hb); }//定义红色画刷填充 if(state==1) {            hb=CreateSolidBrush(RGB(0,255,0)); SelectObject(hdc,hb); RoundRect(hdc,400,120,700,420,15,15);          DeleteObject(hb); }//定义绿色画刷填充 if(state==2)            {                hb=CreateSolidBrush(RGB(255,255,0)); SelectObject(hdc,hb); RoundRect(hdc,400,120,700,420,15,15);          DeleteObject(hb); }//定义黄色画刷填充 state++; EndPaint(hWnd,&ps);    break;    case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } 实验结果如下: 间隔0.1秒。 (2) 总结定时器消息编程的,以及程序设计过程中需要注意的问题; 定时器消息编程的步骤: 1 .定时器消息 定时器时间到时,向窗口发送WM_TIMER 消息,应用程序窗口通过处理该消息来对定时器事件进行处理,该消息的参数说明如下: WM_TIMER wTimerID = wParam; // 定时器标识符 tmprc = (TIMERPROC *) lParam; // 定时器回调函数的地址 其中定时器回调函数在使用 SetTimer 启动定时器时指定,如果没有指定定时器回调函数则可直接处理WM_TIMER 消息。 2 .启动定时器 使用 SetTimer 函数创建一个定时器,并制定超时时间,然后启动定时器。该函数说明如下: UINT SetTimer( HWND hWnd, // 创建定时器的窗口句柄 UINT nIDEvent, // 定时器标识符 UINT uElapse, // 定时时间,单位是16毫秒 TIMERPROC lpTimerFunc // 定时器回调函数地址 ); 3 .销毁定时器 定时器在不使用时要使用KillTimer 函数进行销毁,该函数说明如下: BOOL KillTimer ( HWND hWnd, // 创建定时器的窗口句柄 UINT uIDEvent // 定时器标识符 ); 程序设计过程中需要注意的问题: 定时器的使用时,要严格按照定时器消息的编写,启动定时器,销毁定时器这三个步骤来做,缺少其中任何一个步骤,都没有可能实现给定的功能。 特别是最后一个步骤,很容易忘记。我就忘记了,费了好大劲,才知道哪里错了。 (3) 总结实验的心得体会,实验中遇到的困难以及解决的方法等。 通过这次试验,我熟悉了Visual C++ 6.0的 开发环境;了解了API 编程模式中定时器的使用方法,掌握了在Visual C++ 6.0 开发环境调试程序的方法。 在VC课上,老师留了作业,让我们自愿课下编写一个关于定时器的程序,并做个PPT给同学们讲讲,我不会,菅学辉同学上去讲的,讲得很好,很羡慕他,自己也想编一个,可自己不会,很遗憾。这次试验后,我会了,知道了如何编写一个定时器的程序,自己真的很高兴。定时器消息的编写,启动定时器,销毁定时器这三个步骤,一定要一步一步的来做,不能把最后一个步骤给忘了。
/
本文档为【中国石油大学(华东)VC 实验5】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索