一、系哔哩哔哩学习笔记,测试成功
#include// 底层窗口的头文件 // 6、处理窗口过程 WNDPROC Wndproc; LRESULT CALLBACK // 宏 __stdcall __stdcall 参数的传递顺序:从右往左,依次入栈,并且在函数返回前 清空堆栈 WindowProc( HWND hwnd, // 消息所属的窗口句柄 UINT uMsg, // 具体消息名称 WM_XXXX消息名 WPARAM wParam, // 键盘 附加消息 LPARAM lParam // 鼠标附加消息 ) { switch (uMsg) { case WM_CLOSE: // 所有xxxx_WINDOW为结尾的方法,都不会进入到消息队列中而是直接执行 DestroyWindow( // 发送另一个消息 WM_DESTROY hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_LBUTTONDOWN:// 鼠标左键按下 { int xPos = LOWORd(lParam) , yPos = HIWORd(lParam); TCHAR buf[1024]; wsprintf( // win32 的拼接函数,和linux,sprintf类似 buf, TEXT("x = %d, y = %d"), xPos, yPos); MessageBox( hwnd , buf // 提示内容 , TEXT("鼠标按下") // 标题名 , MB_OK);// 按钮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); } // 程序入口函数 // WINAPI 代表__stdcall 参数的传递顺序:从右往左,依次入栈,并且在函数返回前 清空堆栈 int WINAPI WinMain( HINSTANCE hInstance // 应用程序实列句柄 , HINSTANCE hPrevInstance // 上一个应用程序句柄,在win32环境下,参数一般为NULL,不起作用了 , LPSTR lpCmdLine // char *argv[] , 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// NULL:代表使用系统光标 , IDC_HAND); wc.hIcon = LoadIcon(// 设置图标 NULL// NULL:代表使用系统图标 , IDI_ERROR); wc.hInstance = hInstance;// 应用程序实例句柄 传入WinMain 中的形参即可 wc.lpfnWndProc = WindowProc;// 回调函数 窗口过程 wc.lpszClassName = TEXT("WIN");// 指定窗口类名称 wc.lpszMenuName = NULL;// 菜单名称 wc.style = // 显示风格 0; // 0:代表默认 // 2、注册窗口 RegisterClass(&wc); // 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); // 5、通过循环消息 MSG msg; while (1) { if (FALSE == GetMessage(&msg, NULL, 0, 0)) { break; } //翻译消息 TranslateMessage(&msg); // 分发消息 DispatchMessage(&msg); } return 0; }



