吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2214|回复: 14
收起左侧

[C&C++ 原创] window控制台进度条(黑窗口)

  [复制链接]
answdl 发表于 2023-3-30 15:11
头文件
[C] 纯文本查看 复制代码
#include <stdio.h>
#include <Windows.h>

控制台光标控制
[C] 纯文本查看 复制代码
void Show_Cursor(BOOL flag)
{
    CONSOLE_CURSOR_INFO curInfo = { 0 }; //定义光标信息的结构体变量
    curInfo.dwSize = sizeof(CONSOLE_CURSOR_INFO);  //必须
    curInfo.bVisible = flag; //设置光标是否可见
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台句柄
    SetConsoleCursorInfo(handle, &curInfo); //设置光标信息
}
void Set_CursorPos(SHORT x, SHORT y)
{
    COORD pos = { x,y }; //定义光标位置的结构体变量
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台句柄
    SetConsoleCursorPosition(handle, pos); //设置光标位置
}

特殊字符打印输出
只写了两个案例
char* arr1[] = { "|", "/", "-", "\\" };//不断循环打印
char* arr2[] = { "▌" };//进度条单个字符
[C] 纯文本查看 复制代码
//加载动画
void loading(char* arr[], size_t arr_size)
{
    CONSOLE_SCREEN_BUFFER_INFO curInfo; //定义光标信息的结构体变量
    HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台句柄
    GetConsoleScreenBufferInfo(hOuput, &curInfo);//获取光标信息
    Show_Cursor(FALSE);//隐藏光标
    for (size_t i = 0; i < 100; i++)
    {
        Set_CursorPos(curInfo.dwCursorPosition.X, curInfo.dwCursorPosition.Y);
        printf("%3zu%%:", i + 1);//占5个字符位置
        Set_CursorPos(curInfo.dwCursorPosition.X + 5 + (arr_size == 1 ? i : 0), curInfo.dwCursorPosition.Y);
        printf("%s", arr[i % arr_size]);
        Sleep(50);//任务执行
    }
    Show_Cursor(TRUE);//显示光标
    return;
}
void Progress(void)
{
    //加载
    char* arr1[] = { "|", "/", "-", "\\" };
    loading(arr1, sizeof(arr1) / sizeof(arr1[0]));
    printf("\n");
    //进度条
    char* arr2[] = { "▌" };
    loading(arr2, sizeof(arr2) / sizeof(arr2[0]));
    printf("\n");
    return;
}

免费评分

参与人数 2吾爱币 +6 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
苍生竟何罪 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| answdl 发表于 2023-4-4 19:29
MISTIS 发表于 2023-4-4 16:49
这个进度条运行的时候额外开个线程获取进度状态,影响程序效率吗?

在字符输出这里,换成一个线程原子锁之类的,等待另一个线程发消息,不会占用多少资源的
Sleep(50);//任务执行
按精确度来算,1%就是循环100次,0.1%就是1000次。。。
hairunaa 发表于 2023-3-30 15:23
apull 发表于 2023-3-30 15:31
arujisama 发表于 2023-3-30 15:47
感觉不错,谢谢分享
BananaLi 发表于 2023-3-30 16:56
感谢分享
苍生竟何罪 发表于 2023-3-30 18:22
感谢分享,就是我想学的
Tomxuan 发表于 2023-4-4 16:30
编译不通过, 可以对着修改一下 https://blog.51cto.com/yang/3130205
goldSn0ke 发表于 2023-4-4 16:35
谁发个动画演示
MISTIS 发表于 2023-4-4 16:49
这个进度条运行的时候额外开个线程获取进度状态,影响程序效率吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 01:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表