第四章定时器 windows程序设计王艳平版
2012-08-10 08:59
351 查看
///////////////////////////////////////////////////////////////
// TimerDemo.cpp文件
#include <windows.h>
LRESULT __stdcall WndProc(HWND, UINT, WPARAM, LPARAM);
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
char szWindowClass[] = "Timer";
// 注册窗口类
WNDCLASSEX wcex;
wcex.cbSize
= sizeof(WNDCLASSEX);
wcex.style
= CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc
= (WNDPROC)WndProc;
wcex.cbClsExtra
= 0;
wcex.cbWndExtra
= 0;
wcex.hInstance
= hInstance;
wcex.hIcon
= 0;
wcex.hCursor
= LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground
= (HBRUSH)::GetStockObject(WHITE_BRUSH);
wcex.lpszMenuName
= NULL;
wcex.lpszClassName
= szWindowClass;
wcex.hIconSm
= NULL;
::RegisterClassEx(&wcex);
// 创建并线程主窗口
HWND hWnd = ::CreateWindowEx(
WS_EX_CLIENTEDGE,
// 扩展样式
szWindowClass,
// 类名
"定时器的使用",
// 标题
WS_OVERLAPPEDWINDOW,
// 窗口样式
CW_USEDEFAULT,
// 初始 X 坐标
CW_USEDEFAULT,
// 初始 X 坐标
CW_USEDEFAULT,
// 宽度
CW_USEDEFAULT,
// 高度
NULL,
// 父窗口句柄
NULL,
// 菜单句柄
hInstance,
// 程序实例句柄
NULL);
::ShowWindow(hWnd, nShowCmd);
::UpdateWindow(hWnd);
// 进入消息循环
MSG msg;
while(::GetMessage(&msg, NULL, 0, 0))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
return 1;
}
#define IDT_TIMER1 1//宏
// 消息处理函数
LRESULT __stdcall WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int nNum;
// 计数
static int bSetTimer;
// 指示是否安装了定时器
char szText[56];
PAINTSTRUCT ps;
HDC hdc;
switch(message)
{
case WM_CREATE:
// 窗口正在被创建
bSetTimer = FALSE;
break;
case WM_PAINT:
// 窗口客户区需要重画
hdc = ::BeginPaint(hWnd, &ps);
wsprintf(szText, "计数:%d", nNum);
::TextOut(hdc, 10, 10, szText, strlen(szText));
::EndPaint(hWnd, &ps);
break;
case WM_TIMER:
// 定时器时间已到
if(wParam == IDT_TIMER1)
{
hdc = GetDC(hWnd);
wsprintf(szText, "计数:%d", nNum++);
::TextOut(hdc, 10, 10, szText, strlen(szText));
// 发一声“嘟”的声音
::MessageBeep(MB_OK);
}
break;
case WM_LBUTTONDOWN:
// 用户单击鼠标左键
if(bSetTimer)
{
// 插销一个已经安装的定时器
::KillTimer(hWnd, IDT_TIMER1);
bSetTimer = FALSE;
}
else
{
// 安装一个时间周期为250ms的定时器
if(::SetTimer(hWnd, IDT_TIMER1, 250, NULL) == 0)
// SetTimer函数调用成功会返回新的定时器的ID号,失败的话返回0
{
::MessageBox(hWnd, "安装定时器失败!", "03Timer", MB_OK);
}
else
{
bSetTimer = TRUE;
}
}
break;
case WM_CLOSE:
// 用户要求关闭窗口
if(bSetTimer)
::KillTimer(hWnd, IDT_TIMER1);
break;
case WM_DESTROY:
// 窗口正在被销毁
::PostQuitMessage(0);
break;
}
return ::DefWindowProc(hWnd, message, wParam, lParam);
}
// TimerDemo.cpp文件
#include <windows.h>
LRESULT __stdcall WndProc(HWND, UINT, WPARAM, LPARAM);
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
char szWindowClass[] = "Timer";
// 注册窗口类
WNDCLASSEX wcex;
wcex.cbSize
= sizeof(WNDCLASSEX);
wcex.style
= CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc
= (WNDPROC)WndProc;
wcex.cbClsExtra
= 0;
wcex.cbWndExtra
= 0;
wcex.hInstance
= hInstance;
wcex.hIcon
= 0;
wcex.hCursor
= LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground
= (HBRUSH)::GetStockObject(WHITE_BRUSH);
wcex.lpszMenuName
= NULL;
wcex.lpszClassName
= szWindowClass;
wcex.hIconSm
= NULL;
::RegisterClassEx(&wcex);
// 创建并线程主窗口
HWND hWnd = ::CreateWindowEx(
WS_EX_CLIENTEDGE,
// 扩展样式
szWindowClass,
// 类名
"定时器的使用",
// 标题
WS_OVERLAPPEDWINDOW,
// 窗口样式
CW_USEDEFAULT,
// 初始 X 坐标
CW_USEDEFAULT,
// 初始 X 坐标
CW_USEDEFAULT,
// 宽度
CW_USEDEFAULT,
// 高度
NULL,
// 父窗口句柄
NULL,
// 菜单句柄
hInstance,
// 程序实例句柄
NULL);
::ShowWindow(hWnd, nShowCmd);
::UpdateWindow(hWnd);
// 进入消息循环
MSG msg;
while(::GetMessage(&msg, NULL, 0, 0))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
return 1;
}
#define IDT_TIMER1 1//宏
// 消息处理函数
LRESULT __stdcall WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int nNum;
// 计数
static int bSetTimer;
// 指示是否安装了定时器
char szText[56];
PAINTSTRUCT ps;
HDC hdc;
switch(message)
{
case WM_CREATE:
// 窗口正在被创建
bSetTimer = FALSE;
break;
case WM_PAINT:
// 窗口客户区需要重画
hdc = ::BeginPaint(hWnd, &ps);
wsprintf(szText, "计数:%d", nNum);
::TextOut(hdc, 10, 10, szText, strlen(szText));
::EndPaint(hWnd, &ps);
break;
case WM_TIMER:
// 定时器时间已到
if(wParam == IDT_TIMER1)
{
hdc = GetDC(hWnd);
wsprintf(szText, "计数:%d", nNum++);
::TextOut(hdc, 10, 10, szText, strlen(szText));
// 发一声“嘟”的声音
::MessageBeep(MB_OK);
}
break;
case WM_LBUTTONDOWN:
// 用户单击鼠标左键
if(bSetTimer)
{
// 插销一个已经安装的定时器
::KillTimer(hWnd, IDT_TIMER1);
bSetTimer = FALSE;
}
else
{
// 安装一个时间周期为250ms的定时器
if(::SetTimer(hWnd, IDT_TIMER1, 250, NULL) == 0)
// SetTimer函数调用成功会返回新的定时器的ID号,失败的话返回0
{
::MessageBox(hWnd, "安装定时器失败!", "03Timer", MB_OK);
}
else
{
bSetTimer = TRUE;
}
}
break;
case WM_CLOSE:
// 用户要求关闭窗口
if(bSetTimer)
::KillTimer(hWnd, IDT_TIMER1);
break;
case WM_DESTROY:
// 窗口正在被销毁
::PostQuitMessage(0);
break;
}
return ::DefWindowProc(hWnd, message, wParam, lParam);
}
相关文章推荐
- 第四章 时钟 windows程序设计 王艳平版
- 第四章 简单的打字程序 windows程序设计 王艳平版
- 第四章 查找记事本程序的窗口句柄 windows程序设计 王艳平版
- 第四章 绘图 windows程序设计 王艳平版
- 创建线程 windows程序设计 王艳平版
- 第九章 HOOK程序测试 windows程序设计 王艳平版
- Windows程序设计-定时器
- Windows环境下32位汇编程序设计C版code--第四章
- Windows程序设计——第四章《输出文字》要点摘要
- 第三章 线程局部存储 windows程序设计 王艳平版
- windows程序设计-第四章 system2.c 新增滚动条功能
- 第九章 DLL文件 windows程序设计 王艳平版
- Windows 网络与通信程序设计 王艳平 Phoenix 金羽 防火墙
- Windows程序设计第四章总结
- 第三章 设计自己TLS类_AFXTLS_.H文件 windows程序设计 王艳平版
- 第九章 导入表程序 windows程序设计 王艳平版
- 第三章 设计自己TLS类CPP文件 Windows程序设计 王艳平版
- 第七章 对话框的子控件 windows程序设计 王艳平版
- windows程序设计第四章sysmets3程序详解
- Windows程序设计零基础自学_7_定时器的使用