中国石油大学(华东)VC 实验5实验五 定时器编程实验
一、实验目的
(1) 熟悉Visual C++ 6.0 开发环境;
(2) 掌握API 编程模式中定时器的使用方法
(3) 熟练掌握在Visual C++ 6.0 开发环境调试程序的方法。
二、实验内容
设计一个窗口,在窗口中间位置绘制一个红色粗实线的圆角矩形,并用交替使用三种不同样式的画刷填充矩形的内部,每次刷新的时间间隔为1.0 秒。
三、实验报告
(1) 列出定时器操作相关的程序清单;
#include//包含应用程序中所需的数据类型和数据结构的定义
#include
int nMode...
实验五 定时器编程实验
一、实验目的
(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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。