本次更新内容:
更改托盘图标,在桌面新建快捷方式
提前申明:如果运行不了,请到主页查看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;
}
点个关注吧,长期更新此绘图工具
跑路咯