SmileGuy17 2019-12-10 22:12 采纳率: 0%
浏览 474

为什么使用GetStdHandle函数前后不需要打开控制台屏幕缓冲区句柄?

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <Windows.h>
int main(void)
{
    printf("123\n");
    HANDLE hOut = NULL;  //定义句柄类型的变量并初始化
    hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出句柄

   SetConsoleTextAttribute(hOut,FOREGROUND_INTENSITY  | FOREGROUND_GREEN  | FOREGROUND_BLUE  | BACKEGROUND_BLUE);//设置蓝背景、亮青色文本
   printf("黑马程序员\n");
    SetConsoleTextAttribute(hOut, 10); //设置文本属性为青色
    SetConsoleTextAttribute(hOut, 3);  //设置文本属性为蓝色
    printf("黑马程序员\n");

    CloseHandle(hOut); //关闭句柄

    printf("123\n");

    system("pause");
    return 0;
}

刚接触windows.h头文件,像上文代码,

1.为什么没有打开控制台屏幕缓冲区的句柄就直接用windows.h的函数进行设置控制台,

2.为什么最后又关闭句柄?没打开句柄,只是获取句柄,且为什么关闭句柄

3.试验了关闭句柄后打printf 无法输出,光标不动。为什么会这样?

4.请问想系统的学习windows.h进行学期末大作业 管理系统project的窗口设置能否推荐下方法,或者视频,在网上找不到具体的解析,也没有相关讨论群。

  • 写回答

1条回答 默认 最新

  • qzf1298420664 2023-08-02 17:57
    关注

    问题2的回答:不需要关闭句柄,关闭标准句柄的行为是错误的。在window.h的微软官方解释中明确指出了GetStdHandle()获得的句柄仅仅是复制了一份,句柄志向该控制台的缓冲区。关闭句柄代表关闭了缓冲区,导致无法输出。关闭句柄是一个错误的行为。

    评论

报告相同问题?

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭