#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);//执行内定的消息处理
}
}