#include <windows.h> #pragma comment(lib,"WINMM.LIB") //是一条编译器指令,是给告诉编译器你要链接一些东西,然后在后面的comment里面指明是什么东西 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow){ static TCHAR szAppName[]=TEXT("HelloWin"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style=CS_HREDRAW|CS_VREDRAW;//CS 窗口类别样式 wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hInstance; wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//加载图标供程序使用 IDI 图示ID wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//加载鼠标光标供程序使用 IDC 游标ID wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//取得一个图形对象(在这个例子中,是取得绘制窗口背景的画刷对象) wndclass.lpszMenuName=NULL; wndclass.lpszClassName=szAppName; if(!RegisterClass(&wndclass)){// 为程序窗口注册窗口类别 MessageBox(NULL,TEXT("This program requires Windows NT Upper!"),szAppName,MB_ICONERROR);// 显示消息框 MB 消息框 return 0; } //根据窗口类别建立一个窗口 hwnd=CreateWindow(szAppName, TEXT("HelloWin"), WS_OVERLAPPEDWINDOW,//WS 窗口样式 CW_USEDEFAULT,//CW 建立窗口 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hwnd,iCmdShow);//在屏幕上显示窗口 UpdateWindow(hwnd);//指示窗口自我更新 while(GetMessage(&msg,NULL,NULL,0)){//从消息队列中取得消息 TranslateMessage(&msg);//转译某些键盘消息 DispatchMessage(&msg);//将消息发送给窗口消息处理程序 } return msg.lParam; } LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ HDC hdc; PAINTSTRUCT ps; RECT rect; switch(message){ //WM 窗口消息 case WM_CREATE: PlaySound(TEXT("hellowin.wav"),NULL,SND_FILENAME|SND_ASYNC);//播放一个声音文件 SND 声音 return 0; case WM_PAINT: hdc=BeginPaint(hwnd,&ps);//开始绘制窗口 GetClientRect(hwnd,&rect);//取得窗口显示区域的大小 DrawText(hdc,TEXT("Hello Window!"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);//显示字符串 DT 绘制文字 EndPaint(hwnd,&ps);//结束绘制窗口 return 0; case WM_DESTROY: PostQuitMessage(0);//在消息队列中插入一个「退出程序」消息 return 0; default: return DefWindowProc(hwnd,message,wParam,lParam);//执行内定的消息处理 } }