windows api学习笔记-使用定时器-阿里云开发者社区

开发者社区> xland> 正文

windows api学习笔记-使用定时器

简介: #include #include "resource.h" #include LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的函数原型 int APIENTRY WinMain( ...
+关注继续查看
#include <windows.h>
#include "resource.h"
#include <string>

LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的函数原型

int APIENTRY WinMain(                               //APIENTRY是__stdcall的宏定义
					 HINSTANCE hInstance,           //本模块的实例句柄
					 HINSTANCE hPrevInstance,       //Win16留下的废物
					 LPSTR lpCmdLine,               //命令行参数
					 int nCmdShow                   //主窗口初始化时的现实形式
					 )
{
	char szClassName[] = "MainClass";
	WNDCLASSEX wndclass;   //用来描述主窗口的结构
	wndclass.cbSize = sizeof(wndclass);  //结构的大小
	wndclass.style = CS_HREDRAW|CS_VREDRAW; //如果窗口大小,横向改变和竖向改变都会重画窗口
	wndclass.lpfnWndProc = MainWndProc;//窗口函数指针
	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 = (LPSTR)IDR_MENU1;//指定菜单,菜单在头文件中已经定义了
	wndclass.lpszClassName = szClassName;//窗口类的名称
	wndclass.hIconSm = NULL;//没有类的小图标

	::RegisterClassEx(&wndclass);//注册这个窗口类

	HWND hwnd = ::CreateWindowEx(
		0,//扩展样式
		szClassName,//类名
		"My First Window",//窗口名。标题
		WS_OVERLAPPEDWINDOW,//窗口风格
		CW_USEDEFAULT,//初始X坐标
		CW_USEDEFAULT,//初始Y坐标
		CW_USEDEFAULT,//宽度
		CW_USEDEFAULT,//高度
		NULL,//父窗口句柄
		NULL,//菜单句柄
		hInstance,//实例句柄
		NULL//用户数据
		);
	if(hwnd == NULL)
	{
		::MessageBox(NULL,"创建窗口出错","系统提示",MB_OK);
	}
	::ShowWindow(hwnd,nCmdShow);//显示窗口
	::UpdateWindow(hwnd);//刷新窗口
	MSG msg;
	while(::GetMessage(&msg,NULL,0,0))
	{
		::TranslateMessage(&msg);//转换为键盘消息
		::DispatchMessage(&msg);//将消息发送到相应的窗口函数
	}
	return msg.wParam;//当GetMessage返回FALSE时程序结束
}

#define IDT_TIMER1  1

LRESULT CALLBACK MainWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	char szText[56];
	static int nNum;
	static int bSetTimer;// 指示是否安装了定时器
	HDC hdc;
	PAINTSTRUCT ps;
	switch(message)
	{
		case WM_CREATE:
			{
				::SetWindowText(hwnd,"定时器");
				bSetTimer = FALSE;
				return 0;
			}
		case WM_PAINT:
			{
				hdc = ::BeginPaint(hwnd,&ps);//使无效的客户区变的有效,并取得设备环境句柄				
				::EndPaint(hwnd,&ps);
				return 0;
			}
		case WM_DESTROY:
			{
				::PostQuitMessage(0);//向消息队列投递一个WM_QUIT消息,促使GET MESSAGE函数返回0,结束消息循环
				return 0;
			}
		case WM_COMMAND:
			{
				switch(LOWORD(wParam))
				{
					case ID_FILE_EXIT:
						::SendMessage(hwnd,WM_CLOSE,0,0);
						break;
				}
				return 0;
			}
		case WM_LBUTTONDOWN:
			{
				if(bSetTimer)
				{
					::KillTimer(hwnd,IDT_TIMER1);
					bSetTimer = FALSE;
				}
				else
				{
					if(::SetTimer(hwnd,IDT_TIMER1,600,NULL) == 0)
					{
						::MessageBox(hwnd,"定时器安装失败","系统提示",MB_OK);
					}
					else
					{
						bSetTimer = TRUE;
					}
				}
				break;
			}
		case WM_TIMER:
			{
				if(wParam == IDT_TIMER1)
				{
					hdc = ::GetDC(hwnd);
					nNum++;
					::wsprintf(szText,"计数:%d",nNum);
					::TextOut(hdc,10,10,szText,strlen(szText));//输出文本
					::InvalidateRect(hwnd,NULL,0);
					::MessageBeep(MB_OK);
				}
			}
			break;
	}
	return ::DefWindowProc(hwnd,message,wParam,lParam);
}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Linux应用层的定时器Timer使用详解【转】
转自:http://blog.csdn.net/wwwtovvv/article/details/8601528 版权声明:本文为博主原创文章,未经博主允许不得转载。 linux下定时器的使用 -- alarm() & setitimer(): 1、alarm ---------...
969 0
linux用户态定时器的使用---19【转】
转自:http://www.cnblogs.com/zxouxuewei/p/5095288.html 原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ linux操作系统为每一个进程提供了3个内部计时器。
843 0
AliOS Things 3.0 应用笔记:摄像头配网 + 钉钉群通知 + 天气显示
距离 AliOS Things 3.0 上线已经有一段时间了,新版的 AliOS Things 3.0 体验感到底如何呢?本文将为大家详细讲解其应用实例,我们分别从运行流程、效果展示、操作流程以及源码讲解四个方面进行了阐述。
981 0
ecs训练营第一天 笔记
ecs训练营第一天 笔记
68 0
Java 定时器 Timer 的使用.
一、概念       定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的。在JDK中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务,但封装任务的类却是TimerTask类。
865 0
钉钉案例分享 笔记
钉钉使用ECS的一些经验分享
387 0
实时定时操作代码片段个人记录org.quartz.Job
本文只是实时定时操作代码片段个的人记录,以防遗忘! JAVA中有需要用到定时的地方,但有时候需求并不是隔一段时间去自动执行,而是在确切的时间去执行,这就需要创建特定准确时间的定时任务. 一:Service中部分代码 1.需要调用创建任务的地方 //创建任务定时执行更新活动商品缓存 Date startSalesDate = DateUtil.StringToDate(select
1137 0
在Spring中使用JDK定时器实现调度任务
本文探讨Spring如何集成JDK的Timer定时器,实现计划执行任务。有时候,需要执行一些无用户交互的程序,就像在指定的时间间隔后台运行进程那样。比如,杀毒软件可以每隔2天就在后台运行一次。
811 0
Jest 测试框架使用的学习笔记
Jest 测试框架使用的学习笔记
13 0
+关注
xland
上市公司研发部门经理 管理着40个人以上的技术团队; 服务过诸多大型客户; 为很多知名开源项目提交过代码; 开发过几十万用户的APP; 技能:C++/.NET/JS/架构
329
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载