#include <Windows.h>
LRESULT CALLBACK WindowProc(
HWND hwnd,//消息所属的窗口句柄
UINT uMsg,//具体消息名称
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_CLOSE:
DestroyWindow(hwnd);//DestroyWindow发送另一个消息WM_DESTORY
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
{
int xPos = LOWORD(lParam);
int yPos = HIWORD(lParam);
MessageBox(hwnd, L"aa", L"左键按下", MB_OK);
break;
}
case WM_KEYDOWN:
MessageBox(hwnd, L"键盘按下", L"键盘按下", MB_OK);
break;
case WM_PAINT:
{
PAINTSTRUCT ps;//绘图结构体
HDC hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 100, 100, L"test", strlen("test"));
break;
}
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(
HINSTANCE hInstance, //应用程序实例句柄
HINSTANCE hPrevInstance,
LPSTR lpCmdLine, //char * arbv[]
int nShowCmd)//显示命令 最大化最小化、正常
{
//1,设计窗口
//2,注册窗口
//3,创建窗口
//4,显示和更新
//5,通过循环取消息
//6,处理消息
//1,设计窗口
WNDCLASS wc;
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); //图标 如果第一个参数为NULL,代表使用系统提供的光标
wc.hInstance = hInstance; //应用程序实例句柄 传入WinMain中的形参即可
wc.lpfnWndProc = WindowProc; //回调函数 窗口过程
wc.lpszClassName = TEXT("WIN"); //指定窗口类名称
wc.lpszMenuName = NULL; //菜单名称
wc.style = 0; //显示风格 0代表默认风格
//2,注册窗口
RegisterClass(&wc);
/*
lpClassName,类名
lpWindowName,标题名
dwStyle, 风格WS_OVERLAPPEDWINDOW
x,显示坐标 CW_USEDEFAULT 默认值
y,\
nWidth,
nHeight,
hWndParent, 父窗口NULL
hMenu,菜单NULL
hInstance, 实例句柄
lpParam)附加值 鼠标附加值NULL
*/
//3,创建窗口
HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("WINDOWS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
//4,显示更新
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
//HWND hwnd;//主窗口句柄
//UINT message;//具体消息名称
//WPARAM wParam;//附加消息 键盘消息
//LPARAM lParam;//附加消息 鼠标消息
//DWORD time;//消息产生的时间
//POINT pt;//附加消息 鼠标消息 x y
//5,循环取消息
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
//_Out_ LPMSG lpMsg,消息
// _In_opt_ HWND hWnd,捕获的窗口,填NULL代表捕获所有的窗口
// _In_ UINT wMsgFilterMin,最新和最大的消息过滤,一般填入0
// _In_ UINT wMsgFilterMax);填0代表所有的消息
//if(GetMessage(&msg, NULL, 0, 0) == FALSE)
//{
// break;
//}
//翻译消息
TranslateMessage(&msg);
//分发消息
DispatchMessage(&msg);
}
return 0;
}