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