From 103a68027fca1fc89aea914b99d2514920dca82f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=A8=E9=83=A8=E9=83=BD=E6=83=B3=E5=AD=A6=E6=80=8E?= =?UTF-8?q?=E4=B9=88=E5=8A=9E?= <2434858409@qq.com> Date: Tue, 29 Mar 2022 13:07:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CreateWindows.cpp" | 217 ++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 "\346\214\211\351\222\256\346\216\247\344\273\266/\345\210\251\347\224\250api\344\273\243\347\240\201\345\210\233\345\273\272\351\273\230\350\256\244\346\214\211\351\222\256\346\216\247\344\273\266/CreateWindows.cpp" diff --git "a/\346\214\211\351\222\256\346\216\247\344\273\266/\345\210\251\347\224\250api\344\273\243\347\240\201\345\210\233\345\273\272\351\273\230\350\256\244\346\214\211\351\222\256\346\216\247\344\273\266/CreateWindows.cpp" "b/\346\214\211\351\222\256\346\216\247\344\273\266/\345\210\251\347\224\250api\344\273\243\347\240\201\345\210\233\345\273\272\351\273\230\350\256\244\346\214\211\351\222\256\346\216\247\344\273\266/CreateWindows.cpp" new file mode 100644 index 0000000..06b383e --- /dev/null +++ "b/\346\214\211\351\222\256\346\216\247\344\273\266/\345\210\251\347\224\250api\344\273\243\347\240\201\345\210\233\345\273\272\351\273\230\350\256\244\346\214\211\351\222\256\346\216\247\344\273\266/CreateWindows.cpp" @@ -0,0 +1,217 @@ +// CreateWindows.cpp : 定义应用程序的入口点。 +// + +#include "framework.h" +#include "CreateWindows.h" + +#define MAX_LOADSTRING 100 + +// 全局变量: +//HWND hWnd; +HINSTANCE hInst; // 当前实例 +WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 +WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名 + +// 此代码模块中包含的函数的前向声明: +ATOM MyRegisterClass(HINSTANCE hInstance); +BOOL InitInstance(HINSTANCE, int); + + + +//函数窗口过程回调函数 +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); + +int APIENTRY wWinMain(_In_ HINSTANCE hInstance, + _In_opt_ HINSTANCE hPrevInstance, + _In_ LPWSTR lpCmdLine, + _In_ int nCmdShow) +{ + + //UNREFERENCED_PARAMETER 用来告诉编译器参数hPrevInstance已经被使用 + UNREFERENCED_PARAMETER(hPrevInstance); + UNREFERENCED_PARAMETER(lpCmdLine); + + // TODO: 在此处放置代码。 + + // 初始化全局字符串 + LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + LoadStringW(hInstance, IDC_CREATEWINDOWS, szWindowClass, MAX_LOADSTRING); + MyRegisterClass(hInstance); + + // 执行应用程序初始化: + if (!InitInstance (hInstance, nCmdShow)) + { + return FALSE; + } + + HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_CREATEWINDOWS)); + + + //创建一个MSG结构体,用来存储消息的相关信息 + MSG msg; + + // 主消息循环: + while (GetMessage(&msg, nullptr, 0, 0)) + { + if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + return (int) msg.wParam; +} + + + +// +// 函数: MyRegisterClass() +// +// 目标: 注册窗口类。 +// +ATOM MyRegisterClass(HINSTANCE hInstance) +{ + WNDCLASSEXW wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_CREATEWINDOWS)); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_CREATEWINDOWS); + wcex.lpszClassName = szWindowClass; + wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); + + //调用WinApi注册函数 + return RegisterClassExW(&wcex); +} + +// +// 函数: InitInstance(HINSTANCE, int) +// +// 目标: 保存实例句柄并创建主窗口 +// +// 注释: +// +// 在此函数中,我们在全局变量中保存实例句柄并 +// 创建和显示主程序窗口。 +// +BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) +{ + hInst = hInstance; // 将实例句柄存储在全局变量中 + + //创建窗口 + HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); + + //创建按钮1 + HWND hBwnd_One = CreateWindowW(L"Button", L"退出", + WS_VISIBLE | WS_CHILD, 0, 0, 100, 100, hWnd, + (HMENU)IDB_WINMAIN_One, hInst, nullptr); + if (!hWnd) + { + return FALSE; + } + + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + //创建按钮2 + HWND hBwnd_Two = CreateWindowW(L"Button", L"Exist", + WS_VISIBLE | WS_CHILD, 0, 101, 100, 100, hWnd, + (HMENU)IDB_WINMAIN_Two, hInst, nullptr); + + return TRUE; +} + +// +// 函数: WndProc(HWND, UINT, WPARAM, LPARAM) +// +// 目标: 处理主窗口的消息。 +// +// WM_COMMAND - 处理应用程序菜单 +// WM_PAINT - 绘制主窗口 +// WM_DESTROY - 发送退出消息并返回 +// +// +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_CREATE: + //创建按钮3 + { HWND hBwnd_Three = CreateWindowW(L"Button", L"Start", + WS_VISIBLE | WS_CHILD, 0, 201, 100, 100, hWnd, + (HMENU)IDB_WINMAIN_Three, hInst, nullptr); + } + break; + case WM_COMMAND: + { + int wmId = LOWORD(wParam); + // 分析菜单选择: + switch (wmId) + { + case IDM_ABOUT: + DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); + break; + case IDM_EXIT: + DestroyWindow(hWnd); + break; + case IDB_WINMAIN_One: + MessageBox(hWnd, L"退出按钮", L"提示", MB_OK | MB_ICONQUESTION); + PostQuitMessage(0); //退出程序 + case IDB_WINMAIN_Two: + MessageBox(hWnd, L"Exist按钮", L"提示", MB_OK | MB_ICONQUESTION); + PostQuitMessage(0); //退出程序 + case IDB_WINMAIN_Three: + MessageBox(hWnd, L"Start按钮", L"提示", MB_OK | MB_ICONQUESTION); + PostQuitMessage(0); //退出程序 + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + } + + break; + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hWnd, &ps); + // TODO: 在此处添加使用 hdc 的任何绘图代码... + EndPaint(hWnd, &ps); + } + break; + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; +} + +// “关于”框的消息处理程序。 +INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + switch (message) + { + case WM_INITDIALOG: + return (INT_PTR)TRUE; + + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + EndDialog(hDlg, LOWORD(wParam)); + return (INT_PTR)TRUE; + } + break; + } + return (INT_PTR)FALSE; +} -- GitLab