#include‹Windows.h›
//1.设计窗口
//2.注册窗口
//3.创建窗口
//4.显示和更新
//5.通过循环取消息
//6.处理消息(窗口过程)
//6.处理消息(窗口过程)
RESULT CALLBACK WindowProc(HAND hand, //消息所属的窗口句柄
HINT uMsg, //具体消息名称 WM_XXX消息名
WPARAM wparam, //键盘附加消息
LPARAM lparam){ //鼠标附加消息
HDC hdc;
PAINTSTRUCT ps;
switch(uMsg){
case WM_CLOSE:
//所有XXXWindow为结尾的方法,都不会进入消息队列中,而是直接执行
Destroywindow(hwnd); //发送另一个消息
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:{ //鼠标左键按下
int xPos = LOWORD(IParam);
int yPos = HIWORD(IParam);
WCHAR buf[1024];
wsprint(buf, TEXT("x = %d, y = %d"), xPos, yPos);
MessageBox (hwnd, buf, TEXT("鼠标左键按下"), MB_OK);
break;}
case WM_KEYDOWN: //键盘按下
MessageBox( hwnd, TEXT("str keyboard"), TEXT("键盘按下"), MB_OK);
break;
case WM_PAINT: //绘图
hdc = BeginPaint(hwnd, &ps);
TextOut (hdc, 100, 100, TEXT("Hello"), strlen("Hello"));
EndPaint(hwnd, &ps);
break;}
//返回值用默认方式
return DefWindowProc(hwnd, uMsg, wParam, IParam);
}
//参数顺序从右往左入栈,函数返回前清空栈
it WINAPI WinMain (HINSTANCE hInstance, //应用程序实例句柄
HINSTANCE hPrevInstance, //上一个应用程序句柄,win32下一般为NULL, 无作用
LPSTR IpCmdLine, //chat*argv[]
int nShowCmd){//显示命令 最大化,最小化,正常
//1.设计窗口
WNDCLASS wc;
HWND hwnd;
MSG msg;
wc.cbClsExtra = 0; //类的额外内存
wc.cbWndExtra = 0; //窗口的额外内存
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE BRUSH); //设置背景
wc.hCursor = LoadCursor(NULL, IDC_HAND); //设置光标,第一个参数为NULL默认用系统
wc.hIcon = LoadIcon(NULL, IDI_ERROR);//设置图标
wc.hInstance = hInstance; //应用程序实例句柄,传入WinMain中形参即可
wc.IpfnWndProc = WindowProc; //回调函数 窗口过程
wc.IpszClassName = TEXT("WIN"); //指定窗口类名称
wc.IpszMenuName = NULL; //菜单名称
wc.style = 0; //显示风格,0代表默认风格
//2.注册窗口
RegisterClass (&wc);
//3.创建窗口
hwnd = CreateWindow(wc.IpszClassName, TEXT("WINDOWS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
//4.显示和更新
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
//5.通过循环取消息
while(1){
if(GetMessage(&msg, NULL, 0, 0)== FALSE){
break;
}
//翻译消息
TranslateMessage(&msg);
//不为false 分发消息
DispatchMessage(&msg);
}
//6.处理消息(开头)
return 0;
}