//学习自黑马程序员视频
#include <Windows.h>
LRESULT CALLBACK windowProc(
HWND hwnd,//消息句柄
UINT uMsg,//具体消息
WPARAM wParam,//键盘附加消息
LPARAM lParam//鼠标附加消息
)
{
switch (uMsg) {
case WM_CLOSE:
DestroyWindow(hwnd);//不会关闭程序,不进入消息队列,直接调用窗口过程,发送WM_DESTROY
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("left mouse down"), MB_OK);
break;
}
case WM_KEYDOWN:
MessageBox(hwnd, TEXT("keydown"), TEXT("keydown"), MB_OK);
break;
case WM_PAINT:
{
PAINTSTRUCT pg;
HDC hdc = BeginPaint(hwnd, &pg);
TextOut(hdc, 100, 100, TEXT("HELLO"), strlen("HELLO"));
EndPaint(hwnd, &pg);
}
break;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
//WINAPI ——stdcall的宏 从右到左一次入栈,并在函数返回前清空
int WINAPI WinMain(
HINSTANCE hlnstance,// 应用程序实例句柄
HINSTANCE hPrevInstance,//上一应用程序句柄,一般为空
LPSTR lpComdlines,//char* argv[]
int nSHowCmd// 显示命令,最大化,最小化,正常
)
{
//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);//图标
wc.hInstance = hlnstance;//应用程序示例窗口句柄
wc.lpfnWndProc = windowProc;//窗口过程函数,回调函数
wc.lpszClassName = TEXT("WIN");//窗口名字
wc.lpszMenuName = NULL;//菜单
wc.style = 0;// 显示风格 0为默认风格
//2.注册窗口
RegisterClass(&wc);
//3.创建窗口
HWND hwnd=CreateWindowW(wc.lpszClassName, TEXT("WINDOWS"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,NULL,NULL,hlnstance,NULL);
//显示和更新
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
//通过循环取消息
MSG msg;
while (1)
{
if (GetMessage(&msg, NULL, 0, 0)==FALSE)
{
break;
}
//翻译消息,例如crtl+C之类
TranslateMessage(&msg);
//分发消息
DispatchMessage(&msg);
}
//处理消息,窗口过程
return 0;//返回值
}