我又又又又又又又又更新了~~~纯手工编写C++画图,有注释~~~~~~

本次更新内容:
更改托盘图标,在桌面新建快捷方式

提前申明:如果运行不了,请到主页查看RedpandaDevc++下载,若还是不行就卸了重装。

版本号:1.13.8

480行

cpp 复制代码
//版本号 :v1.13.8
//最终归属权为作者(饼干帅成渣)所有
//禁止转载
//仅供学习,不得用于违法
#include <windows.h>
#include <gdiplus.h>
#include <string>
#include <iostream>
// 控件和消息定义
#define IDC_EDIT_INPUT  109
#define IDC_BTN_COPY    108
#define IDC_STATIC_TIME 1007
#define IDC_EDIT_PWD   1001
#define IDC_BTN_TOGGLE 1002
#define IDC_EDIT1        1003
#define IDC_BUTTON_SUBMIT 1004
#define IDC_BTN_TRAY    1005
#define WM_TRAY_ICON    1006
using namespace std;
// 定义光标切换的状态
enum CursorState {
	ARROW,
	HAND,
	CROSS
};
CursorState currentCursor = CROSS;
HWND g_hwnd;
HWND hhwwnndd;
NOTIFYICONDATA g_nid = {0};
bool g_isInTray = false;
HWND hEdit;
HWND hButton, hButton2;
POINT g_startPos, g_endPos;
RECT g_originalRect;
LONG_PTR g_originalStyle;
bool g_isFullscreen = false;
HBITMAP g_hMemBitmap = NULL;
HDC g_hMemDC = NULL;
int g_width = 0, g_height = 0;
bool g_isPasswordMode = true; // 初始为密码模式

void InitTrayIcon(HWND hwnd) {
	g_nid.cbSize = sizeof(NOTIFYICONDATA);
	g_nid.hWnd = hwnd;
	g_nid.uID = 1;
	g_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	g_nid.uCallbackMessage = WM_TRAY_ICON;
	g_nid.hIcon = LoadIcon(NULL, IDI_INFORMATION);
}

// 切换托盘状态
void ToggleTrayMode(HWND hwnd) {
	if (!g_isInTray) {
		// 最小化到托盘
		ShowWindow(hwnd, SW_HIDE);
		Shell_NotifyIcon(NIM_ADD, &g_nid);
	} else {
		// 恢复窗口
		ShowWindow(hwnd, SW_SHOW);
		Shell_NotifyIcon(NIM_DELETE, &g_nid);
	}
	g_isInTray = !g_isInTray;
}

// 初始化双缓冲
void InitDoubleBuffer(HWND hwnd) {
	RECT rc;
	GetClientRect(hwnd, &rc);
	g_width = rc.right - rc.left;
	g_height = rc.bottom - rc.top;
	HDC hdc = GetDC(hwnd);
	g_hMemDC = CreateCompatibleDC(hdc);
	g_hMemBitmap = CreateCompatibleBitmap(hdc, g_width, g_height);
	SelectObject(g_hMemDC, g_hMemBitmap);
	ReleaseDC(hwnd, hdc);
	// 初始清屏(可选)
	FillRect(g_hMemDC, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH));
}
// 切换全屏函数
void ToggleFullscreen(HWND hwnd) {
	if (!g_isFullscreen) {
		// 进入全屏
		GetWindowRect(hwnd, &g_originalRect);
		g_originalStyle = GetWindowLongPtr(hwnd, GWL_STYLE);
		int screenWidth = GetSystemMetrics(SM_CXSCREEN);
		int screenHeight = GetSystemMetrics(SM_CYSCREEN);

		SetWindowLongPtr(hwnd, GWL_STYLE, WS_POPUP);
		SetWindowPos(hwnd, HWND_TOP,
		             0, 0, screenWidth, screenHeight,
		             SWP_FRAMECHANGED | SWP_SHOWWINDOW
		            );
	} else {
		// 退出全屏
		SetWindowLongPtr(hwnd, GWL_STYLE, g_originalStyle);
		SetWindowPos(hwnd, NULL,
		             g_originalRect.left,
		             g_originalRect.top,
		             g_originalRect.right - g_originalRect.left,
		             g_originalRect.bottom - g_originalRect.top,
		             SWP_FRAMECHANGED | SWP_NOZORDER
		            );
	}
	g_isFullscreen = !g_isFullscreen;
}

// 切换密码显示模式
void TogglePasswordMode(HWND hwnd) {
	// 保存当前文本
	wchar_t szText[256] = {0};
	GetWindowTextW(hEdit, szText, 256);

	// 获取当前窗口位置
	RECT rc;
	GetWindowRect(hEdit, &rc);
	MapWindowPoints(HWND_DESKTOP, GetParent(hEdit), (LPPOINT)&rc, 2);

	// 销毁旧编辑框
	DestroyWindow(hEdit);

	// 创建新编辑框(切换样式)
	DWORD style = WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL;
	if (g_isPasswordMode) {
		style |= ES_PASSWORD;
	}

	hEdit = CreateWindowW(
	            L"EDIT", szText,
	            style,
	            rc.left, rc.top,
	            rc.right - rc.left,
	            rc.bottom - rc.top,
	            hwnd, (HMENU)IDC_EDIT_PWD,
	            NULL,
	            NULL
	        );

	// 更新模式状态
	g_isPasswordMode = !g_isPasswordMode;

	// 更新按钮文本
	SetWindowTextW(GetDlgItem(hwnd, IDC_BTN_TOGGLE),
	               g_isPasswordMode ? L"隐藏密码" : L"显示明文");
}

// 窗口过程函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
	static HWND hStaticTime; // 静态文本控件句柄
	switch (msg) {
		case WM_SETCURSOR:
			if (LOWORD(lParam) == HTCLIENT) {
				HCURSOR hCursor = NULL;
				switch (currentCursor) {
					case ARROW:
						hCursor = LoadCursor(NULL, IDC_CROSS);
						break;
					case HAND:
						hCursor = LoadCursor(NULL, IDC_ARROW);
						break;
					case CROSS:
						hCursor = LoadCursor(NULL, IDC_HAND );
						break;
				}
				SetCursor(hCursor);
				return TRUE;
			}
			return TRUE;
			break;
		case WM_SIZE:
			// 窗口大小变化时重置缓冲
			if (g_hMemDC) {
				DeleteDC(g_hMemDC);
				DeleteObject(g_hMemBitmap);
			}
			InitDoubleBuffer(hwnd);
			break;
		case WM_KEYDOWN:
			if (wParam == VK_BACK) { // 按Backspace切换全屏
				ToggleFullscreen(hwnd);
			} else if (wParam == VK_CONTROL) {
				DestroyWindow(hwnd);
				HWND hwnwd;
				hwnwd = FindWindow("ConsoleWindowClass", NULL);
				if (hwnwd) {
					ShowOwnedPopups(hwnwd, SW_SHOW);
					ShowWindow(hwnwd, SW_SHOW);
				}
			}
			return 0;
		case WM_PAINT: { // 窗口需要绘制时触发
			PAINTSTRUCT ps;
			HDC hdc = BeginPaint(hwnd, &ps);  // 获取设备上下文
			// 设置背景模式为透明
			BitBlt(hdc, 0, 0, g_width, g_height, g_hMemDC, 0, 0, SRCCOPY);
			SetBkMode(hdc, TRANSPARENT);
			HPEN hDashPen = CreatePen(PS_DASH, 1, RGB(256, 256, 256));
			SelectObject(hdc, hDashPen);
			MoveToEx(hdc, g_startPos.x, g_startPos.y, NULL);
			LineTo(hdc, g_endPos.x, g_endPos.y);
			return 0;
		}
		case WM_CLOSE:
			// 清理托盘图标
			if (g_isInTray) Shell_NotifyIcon(NIM_DELETE, &g_nid);
			DestroyWindow(hwnd);
			break;
		case WM_DESTROY:
			KillTimer(hwnd, 1); // 销毁定时器
			PostQuitMessage(0);
			return 0;
			break;
		// 处理鼠标消息
		case WM_LBUTTONDOWN:
			g_startPos.x = LOWORD(lParam);
			g_startPos.y = HIWORD(lParam);
			return 0;

		case WM_MOUSEMOVE:
			if (wParam & MK_LBUTTON) {
				g_endPos.x = LOWORD(lParam);
				g_endPos.y = HIWORD(lParam);
				InvalidateRect(hwnd, NULL, TRUE);
			}
			return 0;
		case WM_ERASEBKGND:
			return 1; // 禁用背景擦除
		case WM_CREATE: {
			// 创建获取时间
			hhwwnndd = CreateWindowW(
			               L"BUTTON", L"获取系统时间",
			               WS_CHILD | WS_VISIBLE | SS_CENTER,
			               20, 350, 150, 30,
			               hwnd, (HMENU)12345,
			               NULL, NULL
			           );
			// 创建按钮
			CreateWindowW(L"BUTTON", L"最小化到托盘",
			              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			              400, 50, 150, 30, hwnd,
			              (HMENU)IDC_BTN_TRAY, NULL, NULL);
			// 创建按钮
			CreateWindow("BUTTON", "切换光标", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
			             20, 450, 100, 30, hwnd, (HMENU)32, NULL, NULL);
			// 初始化托盘
			InitTrayIcon(hwnd);
			// 创建按钮
			hButton = CreateWindow(
			              "BUTTON",                     // 窗口类(按钮)
			              "点击我关闭",                     // 按钮文本
			              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
			              50, 50,                       // 位置 (x, y)
			              100, 30,                       // 大小 (宽度, 高度)
			              hwnd,                         // 父窗口句柄
			              (HMENU)1,                     // 控件ID
			              ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
			              NULL                          // 附加数据
			          );
			CreateWindow(
			    "BUTTON",                     // 窗口类(按钮)
			    "版本号",                     // 按钮文本
			    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
			    10, 10,                       // 位置 (x, y)
			    100, 30,                       // 大小 (宽度, 高度)
			    hwnd,                         // 父窗口句柄
			    (HMENU)15423,                     // 控件ID
			    ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
			    NULL                          // 附加数据
			);
			hButton2 = CreateWindow(
			               "BUTTON",                     // 窗口类(按钮)
			               "点击我切换全屏",                     // 按钮文本
			               WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
			               850, 50,                       // 位置 (x, y)
			               100, 30,                       // 大小 (宽度, 高度)
			               hwnd,                         // 父窗口句柄
			               (HMENU)2,                     // 控件ID
			               ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
			               NULL                          // 附加数据
			           );
			hButton2 = CreateWindow(
			               "BUTTON",                     // 窗口类(按钮)
			               "在桌面新建快捷方式",                     // 按钮文本
			               WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
			               750, 10,                       // 位置 (x, y)
			               200, 30,                       // 大小 (宽度, 高度)
			               hwnd,                         // 父窗口句柄
			               (HMENU)324,                     // 控件ID
			               ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
			               NULL                          // 附加数据
			           );
			// 创建切换按钮
			CreateWindowW(
			    L"BUTTON", L"隐藏密码",
			    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			    100, 300, 80, 30,
			    hwnd, (HMENU)IDC_BTN_TOGGLE,
			    NULL, NULL
			);
			hEdit = CreateWindowW(L"EDIT", L"",
			                      WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
			                      20, 250, 200, 25, hwnd,  (HMENU)IDC_EDIT1, NULL, NULL);

			CreateWindowW(L"BUTTON", L"示例输入",
			              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			              20, 300, 80, 30, hwnd, (HMENU)IDC_BUTTON_SUBMIT, NULL, NULL);
			// 创建复制按钮
			CreateWindowW(
			    L"BUTTON", L"复制",
			    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			    180, 300, 80, 30,
			    hwnd, (HMENU)IDC_BTN_COPY,
			    NULL, NULL
			);
			return 0;
		}
		case WM_TRAY_ICON:
			if (lParam == WM_LBUTTONDBLCLK) {
				ToggleTrayMode(hwnd);
			}
			return 0;
		// 禁用系统最小化操作
		case WM_SYSCOMMAND:
			if (wParam == SC_MINIMIZE || wParam == SC_MAXIMIZE || wParam == SC_CLOSE) {
				MessageBox(
				    hwnd,
				    "没有执行命令的权限",
				    "提示",
				    MB_OK | MB_ICONERROR
				);
				return 0;
			}
			break;
		case WM_COMMAND: {
			if (LOWORD(wParam) == IDC_BTN_COPY) {
				// 获取输入框内容
				wchar_t szText[256];
				GetWindowTextW(hEdit, szText, 256);

				// 打开剪贴板
				if (OpenClipboard(hwnd)) {
					// 清空剪贴板
					EmptyClipboard();

					// 分配全局内存
					HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, (wcslen(szText) + 1) * sizeof(wchar_t));
					if (hGlobal) {
						// 锁定内存并复制数据
						wchar_t* pGlobal = (wchar_t*)GlobalLock(hGlobal);
						wcscpy(pGlobal,  szText);
						GlobalUnlock(hGlobal);

						// 设置剪贴板数据
						SetClipboardData(CF_UNICODETEXT, hGlobal);
					}

					// 关闭剪贴板
					CloseClipboard();
				}

				// 提示用户
				MessageBoxW(hwnd, L"内容已复制到剪贴板!", L"成功", MB_OK);
			}
			// 假设按钮的ID是IDC_BUTTON1
			if (LOWORD(wParam) == 32) {
				if (currentCursor == CROSS) {
					currentCursor = HAND;
				} else if (currentCursor == HAND) {
					currentCursor = ARROW;
				} else {
					currentCursor = CROSS;
				}
				// 强制更新光标
				PostMessage(hwnd, WM_SETCURSOR, (WPARAM)hwnd, HTCLIENT);
			}
			if (wParam == 12345) { //ID为12345
				// 获取本地时间
				SYSTEMTIME st;
				GetLocalTime(&st);

				// 格式化时间字符串
				wchar_t timeStr[64];
				_snwprintf(timeStr, 64,
				           L"%04d-%02d-%02d %02d:%02d:%02d",
				           st.wYear, st.wMonth, st.wDay,
				           st.wHour, st.wMinute, st.wSecond);

//                // 更新静态文本
//                SetWindowTextW(hStaticTime, timeStr);

//                 可选:弹出消息框显示
				MessageBoxW(hwnd, timeStr, L"系统时间", MB_OK);
			}
			if (LOWORD(wParam) == IDC_BTN_TRAY) {
				ToggleTrayMode(hwnd);
			}
			if (LOWORD(wParam) == 324) {
				MessageBoxW(hwnd, L"请先在D盘创建Draw.cpp,若已经创建,请忽略!", L"提示", MB_OK);
				system("powershell -command \"$WshShell=New-Object -comObject WScript.Shell; $Shortcut=$WshShell.CreateShortcut(\'%UserProfile%\\Desktop\\Draw.lnk\'); $Shortcut.TargetPath=\'D:\\Draw.exe'; $Shortcut.Save()\"");
				MessageBoxW(hwnd, L"创建成功!", L"成功", MB_OK);
			}
			if (LOWORD(wParam) == IDC_BUTTON_SUBMIT) {
				wchar_t buffer[256];
				GetWindowTextW(hEdit, buffer, 256);

				if (wcslen(buffer) == 0) {
					MessageBoxW(hwnd, L"输入不能为空!", L"错误", MB_ICONERROR);
				} else {
					MessageBoxW(hwnd, buffer, L"输入内容", MB_OK);
				}
			}
			if (LOWORD(wParam) == IDC_BTN_TOGGLE) {
				TogglePasswordMode(hwnd);
			}
			if (LOWORD(wParam) == 15423) {
				MessageBoxW(hwnd, L"v1.13.8", L"版本号", MB_OK);
			}

			int ButtonID = LOWORD(wParam);
			switch (ButtonID) {
				case 1:
					DestroyWindow(hwnd);
					HWND hwnwd;
					hwnwd = FindWindow("ConsoleWindowClass", NULL);
					if (hwnwd) {
						ShowOwnedPopups(hwnwd, SW_SHOW);
						ShowWindow(hwnwd, SW_SHOW);
					}
					break;
				case 2:
					ToggleFullscreen(hwnd);
					break;
			}
		}
		default:
			return DefWindowProc(hwnd, msg, wParam, lParam);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR pCmdLine, int nCmdShow) {
	HWND hwnwd;
	hwnwd = FindWindow("ConsoleWindowClass", NULL);
	if (hwnwd) {
		ShowOwnedPopups(hwnwd, SW_HIDE);
		ShowWindow(hwnwd, SW_HIDE);
	}
	const char* CLASS_NAME = "CustomWindowClass";

	WNDCLASS wc = {};
	wc.lpfnWndProc = WndProc;
	wc.hInstance = hInstance;
	wc.lpszClassName = TEXT(CLASS_NAME);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);

	if (!RegisterClass(&wc)) return 0;

	// 创建窗口
	HWND hwnd = CreateWindowEx(
	                0,                              // 扩展样式
	                TEXT(CLASS_NAME),                     // 窗口类
	                " 绘画",                   // 窗口标题
	                WS_OVERLAPPEDWINDOW | WS_VISIBLE, // 窗口样式
	                CW_USEDEFAULT, CW_USEDEFAULT,   // 位置
	                1000, 1000,                       // 大小
	                NULL,                           // 父窗口
	                NULL,                           // 菜单
	                hInstance,                      // 实例句柄
	                NULL                            // 附加数据
	            );

	if (!hwnd) return 0;

	// 消息循环
	MSG msg = {};
	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}

不知大家有没有发现我升到Win11了

当然,还有彩蛋

cpp 复制代码
#include <windows.h>
#include <commctrl.h> // 包含进度条控件头文件
// 控件ID定义
#define IDC_PROGRESS_BAR  1001

// 窗口过程
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    static HWND hProgress;

    switch (msg) {
        case WM_CREATE: {
            // 创建进度条控件
            hProgress = CreateWindowExW(
                0, PROGRESS_CLASSW, L"",
                WS_CHILD | WS_VISIBLE | PBS_SMOOTH, // 平滑样式
                20, 20, 300, 30,
                hwnd, (HMENU)IDC_PROGRESS_BAR,
                ((LPCREATESTRUCT)lParam)->hInstance,
                NULL
            );

            // 设置进度范围(0-100)
            SendMessageW(hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
            
            // 设置初始进度值
            SendMessageW(hProgress, PBM_SETPOS, 0, 0);
            
            // 启动定时器模拟进度更新(间隔500ms)
            SetTimer(hwnd, 1, 50, NULL);
            return 0;
        }

        case WM_TIMER: {
            // 获取当前进度值
            int currentPos = (int)SendMessageW(hProgress, PBM_GETPOS, 0, 0);
            
            // 每次增加5%
            if (currentPos < 100) {
                currentPos += 5;
                SendMessageW(hProgress, PBM_SETPOS, currentPos, 0);
            } else {
                // 进度完成后停止定时器
                KillTimer(hwnd, 1);
                MessageBoxW(hwnd, L"进度已完成!", L"提示", MB_OK);
            }
            return 0;
        }

        case WM_CLOSE:
            DestroyWindow(hwnd);
            return 0;

        case WM_DESTROY:
            KillTimer(hwnd, 1); // 确保销毁定时器
            PostQuitMessage(0);
            return 0;

        default:
            return DefWindowProcW(hwnd, msg, wParam, lParam);
    }
}

// WinMain函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) {

    // 注册窗口类
    const wchar_t CLASS_NAME[] = L"ProgressBarDemo";
    WNDCLASSW wc = {};
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = CLASS_NAME;
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    RegisterClassW(&wc);

    // 创建窗口
    HWND hwnd = CreateWindowExW(
        0, CLASS_NAME, L"进度条示例",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        400, 200,
        NULL, NULL, hInstance, NULL
    );

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // 消息循环
    MSG msg;
    while (GetMessageW(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessageW(&msg);
    }

    return 0;
}
cpp 复制代码
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#define IDC_SLIDER1    1009
#define IDC_STATIC     1010

// 窗口过程
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    static HWND hSlider, hStatic;

    switch (msg) {
        case WM_CREATE: {
            // 创建滑动栏
            hSlider = CreateWindowW(
                TRACKBAR_CLASSW, L"",
                WS_CHILD | WS_VISIBLE | TBS_HORZ | TBS_AUTOTICKS,
                20, 20, 300, 40,
                hwnd, (HMENU)IDC_SLIDER1, NULL, NULL
            );
            
            // 设置滑动范围(0-100)
            SendMessageW(hSlider, TBM_SETRANGEMIN, TRUE, 0);
            SendMessageW(hSlider, TBM_SETRANGEMAX, TRUE, 100);
            SendMessageW(hSlider, TBM_SETTICFREQ, 10, 0);

            // 创建显示文本的静态控件
            hStatic = CreateWindowW(
                L"STATIC", L"当前值: 0",
                WS_CHILD | WS_VISIBLE,
                20, 70, 300, 20,
                hwnd, (HMENU)IDC_STATIC, NULL, NULL
            );
            return 0;
        }

        case WM_HSCROLL: {
            if ((HWND)lParam == hSlider) {
                int pos = (int)SendMessageW(hSlider, TBM_GETPOS, 0, 0);
                wchar_t szText[64];
                _snwprintf(szText, 64, L"当前值: %d", pos);
                SetWindowTextW(hStatic, szText);
            }
            return 0;
        }

        case WM_CLOSE:
            DestroyWindow(hwnd);
            return 0;

        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;

        default:
            return DefWindowProcW(hwnd, msg, wParam, lParam);
    }
}

// WinMain函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) {

    // 注册窗口类
    const wchar_t CLASS_NAME[] = L"SliderDemo";
    WNDCLASSW wc = {};
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = CLASS_NAME;
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    RegisterClassW(&wc);

    // 创建窗口
    HWND hwnd = CreateWindowExW(
        0, CLASS_NAME, L"滑动栏示例",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        400, 200,
        NULL, NULL, hInstance, NULL
    );

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // 消息循环
    MSG msg;
    while (GetMessageW(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessageW(&msg);
    }

    return 0;
}
cpp 复制代码
#include <iostream>
#include <windows.h>
#include <vector>
using namespace std;  

long long n,j;

void test2()
{
    DWORD dwLen = GetLogicalDriveStrings(0, NULL);	//获取系统字符串长度.
    char * pszDriver = new char[dwLen];				//构建一个相应长度的数组.
    GetLogicalDriveStrings(dwLen, pszDriver);		//获取盘符字符串.
    vector<string> v;
    while (*pszDriver != '\0')
    {
        v.push_back(pszDriver);
        pszDriver += strlen(pszDriver) + 1;			//定位到下一个字符串.加一是为了跳过'\0'字符串.
    }

    int DType;
    int si = 0;
    BOOL fResult;
    unsigned long long i64FreeBytesToCaller;
    unsigned long long i64TotalBytes;
    unsigned long long i64FreeBytes;

    for (int i = 0; i < dwLen / 4; ++i)
        //为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:\NULLB:\NULLC:\NULL,这样的信息,所以DSLength/4可以获得具体大循环范围
    {
        DType = GetDriveType(v[i].c_str());
        //GetDriveType函数,可以获取驱动器类型,参数为驱动器的根目录
        if (DType == DRIVE_FIXED)
        {
            cout << "硬盘";
        }
        else if (DType == DRIVE_CDROM)
        {
            cout << "光驱";
        }
        else if (DType == DRIVE_REMOVABLE)
        {
            cout << "可移动式磁盘";
        }
        else if (DType == DRIVE_REMOTE)
        {
            cout << "网络磁盘";
        }
        else if (DType == DRIVE_RAMDISK)
        {
            cout << "虚拟RAM磁盘";
        }
        else if (DType == DRIVE_UNKNOWN)
        {
            cout << "未知设备";
        }

        fResult = GetDiskFreeSpaceEx(
            v[i].c_str(),
            (PULARGE_INTEGER)&i64FreeBytesToCaller,
            (PULARGE_INTEGER)&i64TotalBytes,
            (PULARGE_INTEGER)&i64FreeBytes);
        //GetDiskFreeSpaceEx函数,可以获取驱动器磁盘的空间状态,函数返回的是个BOOL类型数据
        if (fResult)//通过返回的BOOL数据判断驱动器是否在工作状态
        {
            cout << " totalspace:" << (float)i64TotalBytes / 1024 /1024/1024<< " GB";//磁盘总容量
            cout << " freespace:" << (float)i64FreeBytesToCaller / 1024/1024/1024 << " GB";//磁盘剩余空间
        }
        else
        {
            cout << " 设备未准备好";
        }
        cout << endl;
        si += 4;
    }
}

int main()
{
	while(1){
		test2();
		Sleep(50);
		system("cls");
	} 
	
}

x=?

点个关注吧,长期更新此绘图工具

------------------------------------------------------------------全剧终...

.....................不可能的

cpp 复制代码
#include <windows.h>
#include <commctrl.h>
// ??ID??
#define IDC_TAB_MAIN     1001
#define IDC_PAGE1_EDIT   1002
#define IDC_PAGE2_BUTTON 1003

// ?????
HWND g_hTabControl, g_hPage1, g_hPage2;

// ????
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
        case WM_CREATE: {
            // ???????
            g_hTabControl = CreateWindowExW(
                0, WC_TABCONTROLW, L"",
                WS_CHILD | WS_VISIBLE | TCS_FIXEDWIDTH,
                10, 10, 380, 250,
                hwnd, (HMENU)IDC_TAB_MAIN,
                ((LPCREATESTRUCT)lParam)->hInstance,
                NULL
            );

            // ?????
            TCITEMW tci ;
            tci.mask = TCIF_TEXT;
            
            tci.pszText = L"1";
            TabCtrl_InsertItem(g_hTabControl, 0, &tci);
            
            tci.pszText = L"2";
            TabCtrl_InsertItem(g_hTabControl, 1, &tci);

            // ?????1(?????)
            g_hPage1 = CreateWindowExW(
                WS_EX_CONTROLPARENT, L"EDIT", L"1",
                WS_CHILD | WS_VISIBLE | ES_MULTILINE,
                20, 40, 360, 200,
                hwnd, (HMENU)IDC_PAGE1_EDIT,
                ((LPCREATESTRUCT)lParam)->hInstance,
                NULL
            );

            // ?????2(????)
            g_hPage2 = CreateWindowExW(
                0, L"BUTTON", L"2",
                WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                20, 40, 100, 30,
                hwnd, (HMENU)IDC_PAGE2_BUTTON,
                ((LPCREATESTRUCT)lParam)->hInstance,
                NULL
            );

            // ??????1
            ShowWindow(g_hPage2, SW_HIDE);
            return 0;
        }

        case WM_NOTIFY: {
            NMHDR* pNmHdr = (NMHDR*)lParam;
            if (pNmHdr->idFrom == IDC_TAB_MAIN && pNmHdr->code == TCN_SELCHANGE) {
                // ???????/??????
                int sel = TabCtrl_GetCurSel(g_hTabControl);
                ShowWindow(g_hPage1, (sel == 0) ? SW_SHOW : SW_HIDE);
                ShowWindow(g_hPage2, (sel == 1) ? SW_SHOW : SW_HIDE);
            }
            return 0;
        }

        case WM_SIZE: {
            // ?????????
            MoveWindow(g_hTabControl, 10, 10, LOWORD(lParam)-20, HIWORD(lParam)-20, TRUE);
            return 0;
        }

        case WM_CLOSE:
            DestroyWindow(hwnd);
            return 0;

        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;

        default:
            return DefWindowProcW(hwnd, msg, wParam, lParam);
    }
}

// WinMain??
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) {
    // ?????
    const wchar_t CLASS_NAME[] = L"TabControlDemo";
    WNDCLASSW wc = {0};
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = CLASS_NAME;
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    RegisterClassW(&wc);

    // ????
    HWND hwnd = CreateWindowExW(
        0, CLASS_NAME, L"fff",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        400, 300,
        NULL, NULL, hInstance, NULL
    );

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // ????
    MSG msg;
    while (GetMessageW(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessageW(&msg);
    }

    return 0;
}

点个关注吧,长期更新此绘图工具

参考我之前的

跑路咯

相关推荐
程序员总部17 分钟前
单例模式在Python中的实现和应用
开发语言·python·单例模式
demonlg011220 分钟前
Go 语言 fmt 模块的完整方法详解及示例
开发语言·后端·golang
冷琴199632 分钟前
基于python+django的商城网站-电子商城管理系统源码+运行
开发语言·python·django
Tadecanlan1 小时前
[C++面试] 你了解视图吗?
开发语言·c++
You can do more1 小时前
Qt Concurrent 并发 Map 和 Map-Reduce
开发语言·qt
CSUC2 小时前
【Qt】QByteArray详解
开发语言·qt
Unlimitedz2 小时前
歌曲缓存相关功能
开发语言·ios·缓存·swift
东方韡璟2 小时前
Objective-C语言的数据可视化
开发语言·后端·golang
染指11102 小时前
53.第二阶段x86游戏实战2-c++实现自动打怪2
开发语言·c++·游戏·游戏逆向