Win32 API

本文详细介绍了如何在C语言中进行控制台编程,包括使用`COORD`结构储存坐标,通过`SetConsoleCursorPosition`移动光标,隐藏光标,打印宽字符(使用`wprintf`和本地化),以及获取按键情况(`GetAsyncKeyState`)。
摘要由CSDN通过智能技术生成

除了C语言中的一些知识之外,你还需要学会1.储存坐标  2.把光标移到指定位置  3.隐藏光标  4.打印宽字符  5. 获取按键情况(  都需要#include<windows.h>头文件   )

1.储存坐标

//可以在之后用来改变光标位置

在控制台上的显示屏是有坐标的。一个窄字符占一个格。从左向右为x轴,从上到下为y轴!!!y轴的数也都是正数。(坐标系的x轴的数是按照单字符来算的)

储存坐标需要COORD结构体变量

COORD pos={40,10};



 2.把光标移到指定位置

SetConsoleCursorPosition( 句柄 , 坐标 )  改变光标位置

//set设置,console控制台,cursor光标,position位置

什么是句柄?为了粗略了解它,我先提出一个现象。在你点开window命令提示符(或者打开其他进程的时候),可以一次性点开很多很多。那么他们储存的地肯定是不同的。(系统为每个进程在内存中分配一定的区域,用来存放各个句柄,)为了让程序知道我们是要操作哪一个命令提示符,就需要获得他的句柄(才可以让程序知道我要操作的是谁)。

句柄的作用:在Windows使用句柄来标识诸如窗口、位图、画笔等对象,并通过句柄找到这些对象。

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

//用HANDLE类型的handle变量接收句柄

//GetStdHandle函数的返回类型是HANDLE,GetStdHandle是一个Windows API函数。它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄

参数

GetStdHandle函数的参数可以是下列之一

参数含义
STD_INPUT_HANDLE标准输入句柄
STD_OUTPUT_HANDLE标准输出句柄
STD_ERROR_HANDLE标准错误句柄
void SetPos(int x, int y)
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//获得标准输出的句柄(标准输出-->显示屏)
	COORD pos = {x,y};//储存坐标
	SetConsoleCursorPosition(handle, pos);//设置光标位置
}//用一个函数封装起来


 3.隐藏光标:

 定义光标信息结构体变量 CONSOLE_CURSOR_INFO  cursor info={0};

       // typedef struct _CONSOLE_CURSOR_INFO

        //{ 
     //     DWORD dwSize; // 光标百分比大小 
     //     BOOL bVisible; // 是否可见,false代表光标不可见,需要引头文件#include<bool.h>
        //} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;

//了解CONSOLE_CURSOR_INFO结构体

 获取控制台句柄

        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

 调用设置控制台光标信息函数

        SetConsoleCursorInfo(handle,&cursor info);

       //BOOL SetConsoleCursorInfo // 设置光标信息 

       //        { 

       //                 HANDLE hConsoleOutput, // 句柄                                                                  

       //                 CONST CONSOLE_CURSOR_INFO *lpConsoleCursorInfo // 光标信息 

       //         }; 

修改光标信息:

    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO CursorInfo;//光标信息的变量
    GetConsoleCursorInfo(handle, &CursorInfo);//获取光标信息
    CursorInfo.bVisible = false;
    SetConsoleCursorInfo(handle, &CursorInfo);//设置光标信息

 4.打印宽字符:

什么是宽字符?最开始,ASCLL码值只是适用使用英语的国家,对于我们中国,汉字有10万多。所以一个汉字占2个字节。这种就是宽字符。

怎么打印宽字符?

先要本地化:

#include<locate.h>

setlocale(LC_ALL, "");

wprintf(L"%lc",L'中');

wprintf(L"%lc",L'国');

wprintf(L"%lc",L'□');

5.获取按键情况:

 GetAsyncKeyState 获取按键情况的函数
将键盘上每一个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态(返回值是short类型)
最高位是1那说明按键的状态是按下,0代表键盘状态是抬起
最低位被置为1,说明按键被按过。否则为0

#define KEY_PRESS(vk) ((GetAsyncKeyState(vk)&1)?1:0)//三目表达式,传vk变量&1,可以知道最后一位是1还是0

 

 

  • 37
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值