#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);
}