#include<Windows.h>
//WINAPI宏的作用,WINAPI代表__stdcall 参数的传递顺序,从右到左依次入栈,并且在函数返回前 清空堆栈
LRESULT CALLBACK WindowProc(
HWND hwnd, //消息所属的窗口句柄
UINT uMsg, ///具体消息名称,WM_xxx消息名
WPARAM wParam,//键盘附加消息
LPARAM lParam)//鼠标附加消息
{
switch (uMsg){
case WM_CLOSE:
//所有以xxxwindow结尾的方法都不会进入消息队列,而是直接处理
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN://鼠标左键按下
{
int xPos = LOWORD(lParam);
int yPos = HIWORD(lParam);
char buf[1024];
wsprintf(buf, TEXT("x=%d,y=%d"), xPos, yPos);
MessageBox(hwnd, buf, TEXT("鼠标左键按下"), MB_OK);
}
break;
case WM_KEYDOWN:
MessageBox(hwnd, TEXT("键盘按下"), TEXT("键盘按下"), MB_OK);
break;
case WM_PAINT:
{ PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 100, 100, TEXT("HELLO"), strlen("HELLO"));
EndPaint(hwnd, &ps);
}
break;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
int WINAPI WinMain
(
HINSTANCE hInstance, //应用程序实例句柄
HINSTANCE hPrevInstance, //上一个应用程序句柄,win32程序中参数一般为NULL,一般不起作用
LPSTR lpCmdLine, //char *[]
int nShowCmd //显示命令,最大化,最小化,正常
)
{ //设计窗口,注册窗口,创建窗口,显示和更新,通过循环取消息,处理消息(窗口过程)
WNDCLASS wc;
wc.cbClsExtra = 0;//类的额外的内存
wc.cbWndExtra = 0;//窗口的额外内存
wc.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);//设置背景颜色
wc.hCursor = LoadCursor(NULL,IDC_HAND );//设置光标
wc.hIcon = LoadIcon(NULL, IDI_HAND);
wc.hInstance = hInstance;
wc.lpfnWndProc = WindowProc;
wc.lpszClassName = TEXT("WIN");
wc.lpszMenuName = NULL;
wc.style = 0;//0代表默认风格
RegisterClass(& wc);
//lpClassName, lpWindowName, dwStyle, x, y, \nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam
HWND hWnd = CreateWindow(wc.lpszClassName,TEXT("windows"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd, SW_SHOWNORMAL);
//更新窗口
UpdateWindow(hWnd);
/*通过循环取消息
HWND hwnd; 主窗口句柄
UINT message; 具体消息名称
WPARAM wParam; 附加消息 键盘消息
LPARAM lParam; 附加消息 鼠标消息
DWORD time; 消息产生时间
POINT pt; 附加消息 鼠标消息点击的点的位置
*/
MSG msg;
/*
_Out_ LPMSG lpMsg, 消息的名称
_In_opt_ HWND hWnd, NULL表示获取所有的窗口
_In_ UINT wMsgFilterMin, 最小和最大的过滤消息,一般为0,一般为捕获所有的消息
_In_ UINT wMsgFilterMax
*/
while (1){
if (GetMessage(&msg, NULL, 0, 0)== FALSE){
break;
}
TranslateMessage(&msg);
DispatchMessage( &msg);
}
//处理窗口的过程
return 0;
}