WIN32学习——定时器消息
来源:互联网 发布:网络ip地址冲突 编辑:程序博客网 时间:2024/06/05 15:11
1 定时器消息
可以在程序中设置定时器,当到达时间间隔时,定时器会向窗口发送一个WM_TIMER消息,定时器的精度为毫秒,但是精准度很低。
2 消息的参数
WPARAM - 定时器ID
LPARAM - 定时器处理函数的指针
3 定时器的使用步骤
a、创建定时器
UINT SetTimer(
HWND hWnd, //定时器窗口句柄
UINT nIDEvent,//定时器ID
UINT uElapse, //时间间隔
TIMERPROC lpTimerFunc//定时器处理函数指针
);创建成功,返回非0.
说明:当lpTimerFunc设置为NULL时,使用窗口处理函数作为定时器处理函数,否则就使用定时器处理函数处理定时器消息
b、消息处理 WM_TIMER
c、关闭定时器
BOOL KillTimer(
HWND hWnd, //定时器窗口句柄
UINT uIDEvent //定时器ID
可以在程序中设置定时器,当到达时间间隔时,定时器会向窗口发送一个WM_TIMER消息,定时器的精度为毫秒,但是精准度很低。
2 消息的参数
WPARAM - 定时器ID
LPARAM - 定时器处理函数的指针
3 定时器的使用步骤
a、创建定时器
UINT SetTimer(
HWND hWnd, //定时器窗口句柄
UINT nIDEvent,//定时器ID
UINT uElapse, //时间间隔
TIMERPROC lpTimerFunc//定时器处理函数指针
);创建成功,返回非0.
说明:当lpTimerFunc设置为NULL时,使用窗口处理函数作为定时器处理函数,否则就使用定时器处理函数处理定时器消息
b、消息处理 WM_TIMER
c、关闭定时器
BOOL KillTimer(
HWND hWnd, //定时器窗口句柄
UINT uIDEvent //定时器ID
);
附加定时器消息学习代码:
/*说明:窗口的实现对于WM_TIMER消息的学习在窗口绘制小球,并用定时器让小球运动起来,看小球的运行轨迹*/#include <Windows.h>//圆的半径#define REDIUS 20HINSTANCE g_hInstance;HANDLE g_hOutputHandle;int n_xPos = 100,n_yPos = 100;//表示从左到右,从上到下的方向int LEFT_RIGHT = 1;int UP_DOWN = 1;void CALLBACK MyTimer(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime ){TCHAR szText[256] = {0};wsprintf(szText,__TEXT("TIMER:%d\n"),idEvent);WriteConsole(g_hOutputHandle,szText,lstrlen(szText),NULL,NULL);//得到窗口的矩形区域RECT rt = {0};GetClientRect(hwnd,&rt);if(n_xPos >= rt.right - 20)LEFT_RIGHT = 0;else if (n_xPos <= rt.left){LEFT_RIGHT = 1;}if(LEFT_RIGHT)n_xPos++;elsen_xPos--;if(n_yPos >= rt.bottom - 20)UP_DOWN = 0;else if (n_yPos <= rt.top){UP_DOWN = 1;}if(UP_DOWN)n_yPos++;elsen_yPos--;InvalidateRect(hwnd,NULL,FALSE);}void OnTimer(WPARAM wParam){TCHAR szText[256] = {0};wsprintf(szText,__TEXT("WM_TIMER:%d\n"),wParam);WriteConsole(g_hOutputHandle,szText,lstrlen(szText),NULL,NULL);}void OnCreate(HWND hWnd){//设置定时器函数中的最后一个参数如果是NULL,则调用窗口处理函数处理WM_TIMER消息,非NULL则调用自己定义的定时器处理函数MyTimer。//SetTimer(hWnd,1,1000,NULL);SetTimer(hWnd,2,10,MyTimer);}void OnPaint(HWND hWnd){PAINTSTRUCT ps = {0};HDC hDC = BeginPaint(hWnd,&ps);Ellipse(hDC,n_xPos,n_yPos,n_xPos + REDIUS,n_yPos+REDIUS);EndPaint(hWnd,&ps);}LRESULT CALLBACK MyProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){switch(uMsg){case WM_TIMER:OnTimer(wParam);break;case WM_PAINT:OnPaint(hWnd);break;case WM_CREATE:OnCreate(hWnd);break;case WM_SYSCOMMAND:if (wParam == SC_CLOSE){if(IDOK == MessageBox(hWnd,__TEXT("确定关闭窗口?"),__TEXT("提示"),MB_OKCANCEL)){PostQuitMessage(0);}elsereturn 0;}break;}return DefWindowProc(hWnd,uMsg,wParam,lParam);}ATOM Register(LPCWSTR className){WNDCLASSEX wc = {0};wc.cbClsExtra = 0;wc.cbSize = sizeof(WNDCLASSEX);wc.cbWndExtra = 0;wc.hbrBackground = (HBRUSH)COLOR_WINDOW;wc.hCursor = NULL;wc.hIcon = NULL;wc.hIconSm = NULL;wc.hInstance = g_hInstance;wc.lpfnWndProc = MyProc;wc.lpszClassName = className;wc.lpszMenuName = NULL;wc.style = CS_HREDRAW | CS_VREDRAW;return RegisterClassEx(&wc);}HWND Create(LPCWSTR className,LPCWSTR windowName){return CreateWindowEx(0,className,windowName,WS_OVERLAPPEDWINDOW,100,100,500,400,NULL,NULL,g_hInstance,NULL);}void Show(HWND hWnd){ShowWindow(hWnd,SW_SHOW);UpdateWindow(hWnd);}void Message(){MSG ms = {0};while (GetMessage(&ms,NULL,0,0)){TranslateMessage(&ms);DispatchMessage(&ms);}}int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){AllocConsole();g_hOutputHandle = GetStdHandle(STD_OUTPUT_HANDLE);g_hInstance = hInstance;Register(__TEXT("Main"));HWND hWnd = Create(__TEXT("Main"),__TEXT("This is test"));Show(hWnd);Message();return 0;}
0 0
- Win32学习笔记——定时器消息
- WIN32学习——定时器消息
- win32学习08.键盘鼠标定时器消息
- Win32学习笔记——消息处理
- WIN32学习笔记——键盘消息
- Win32学习笔记——鼠标消息
- WIN32学习——鼠标消息
- WIN32学习——菜单消息
- 【win32】day05-鼠标消息/定时器消息/菜单
- WIN32学习——Windows消息机制(一)
- WIN32学习——Windows消息机制(二)
- [Win32]Win32 SDK编程系列文章——键盘输入消息
- WIN32学习——绘图
- Win32学习笔记 - Windows 常用消息大全
- win32学习07.Windows消息机制
- win32消息的理解和学习
- Win32 SDK基础(8)—— Windows消息机制
- [Win32]Win32 SDK编程系列文章——鼠标输入消息
- 基于TCPClient的客户端服务器的简单通信demo
- rose jade框架 sql中的字段和实体类中的字段的映射关系
- gdb so 加载
- Linux音频设备驱动_ALSA驱动框架的转载链接
- Activiti部署模型乱码
- WIN32学习——定时器消息
- Spring Boot Tomcate配置 (SSL配置)
- 解决oracle表锁死
- 李白买酒的递归求法
- Java实现的二分查找算法
- ORACLE事物隔离级别
- Palindrome Linked List
- [Leetcode] 150. Evaluate Reverse Polish Notation 解题报告
- 第一行代码第二版(郭霖著)笔记之第六章(详解持久化技术)