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


    #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);
    }
    
    
    
  • 相关阅读:
    R语言常用操作
    Java小知识点
    客户端(android,ios)与服务器通信
    图片保存数据库
    Centos 添加SWAP(交换分区)
    mysql基本知识
    php 工作模式
    apache 工作模式
    lnmp 虚拟主机配置及重写
    mysql alter的常用用法
  • 原文地址:https://www.cnblogs.com/liulun/p/1672000.html
Copyright © 2020-2023  润新知