鱼C论坛

 找回密码
 立即注册
查看: 1475|回复: 1

[技术交流] 分享对控制台的学习

[复制链接]
发表于 2015-4-3 14:59:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdafx.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

int  main(int argc, _TCHAR* argv[])
{
HANDLE hStdIn, hStdOut;                      //初始化句柄成员hStdIn, hStdOut
hStdIn = GetStdHandle(STD_INPUT_HANDLE);     //定义句柄成员hStdIn,为输入句柄
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);   //定义句柄成员hStdhandle,为输出句柄
/*************************************************设置一个控制台**************************************************/
BOOL WINAPI WriteConsole(
  _In_ HANDLE hConsoleOutput,              //控制台输出句柄
  _In_ const VOID *lpBuffer,               //需输出的数据指针
  _In_ DWORD nNumToWrite,                  //需要输出的字符串数量
  _Out_ LPDWORD lpNumWriten,               //实际输出的字符数量
  _Reserved_ LPVOID lpReserved             //系统保留
  );
    //定义一个wchar_t类型的字符串变量*szStr//
wchar_t *szStr = L"Hello 15PB!";            //*szStr指向一个字符串指向字符串“Hello 15PB!”
DWORD dwRet;                                 //初始化一个DWORD类型的 参数,作为计算字符串的个数
WriteConsole(hStdOut, szStr, 12, &dwRet, NULL);//将上面的BOOL WINAPI WriteConsole 类型放入参数,然后调用
if (!WriteConsole(hStdOut, szStr, 12, &dwRet, NULL))
{
  printf("设置控制台句柄失败T_T");
}


//************************************************设置控制台标题******************************************************/
BOOL WINAPI setConsoleTitle(
  _In_ LPCTSTR lpConsoleTitle              //指向控制台标题的指针
  );
  wchar_t szStr1[] = L"Consloe Title FISHC!";//设置控制台标题为Console Title
if (!SetConsoleTitle(szStr1))                //执行并判断,如果指针不能指向控制台标题,返回提示错误           
{
  printf("控制台标题设置失败");            
}


//***************************************************设置控制台窗口大小*********************************************//
BOOL WINAPI SetConsoleWindowInfo
  (
  _In_ HANDLE hConsoleOutput,              //控制台输出句柄
     _In_ BOOL bAbsolute,                     //使用BOOL值判断坐标是否为绝对值
     _In_ const SMALL_RECT *lpcWindow         //新的窗口坐标信息
     );
SMALL_RECT strWindow = {0,0,80-1,50-1};      //设置窗口大小参数
if (!SetConsoleWindowInfo(hStdOut, true, &strWindow))//执行并判断设置控制台大小是否成功,不成功就提示设置控制台大小失败
{
  printf("设置控制台窗口大小失败!");
}

/******************************************************设置缓冲区大小*************************************************/
BOOL WINAPI SetConsoleScreenBufferSize
  (
  _In_ HANDLE hConsoleoutput,              //控制台输出句柄
  _In_ COORD dwSize                        //输出大小
  );
COORD BufferSize = { 80, 40 };               //设置缓冲区大小参数
if (!SetConsoleScreenBufferSize(hStdOut, BufferSize))//判断缓冲区是否成功
{
  printf("设置缓冲区失败T_T");
}

/**************************************设置在指定位置插入指定数量的字符数据******************************************/
BOOL WINAPI WriteConsoleOutputCharacter
  (
  _In_ HANDLE hConsoleOutput,              //控制台输出句柄
  _In_ LPCTSTR lpCharacter,                //输出的字符串指针
  _In_ DWORD nLength,                      //输出的字符串大小
  _In_ COORD deWriteCoord,                 //输出坐标
     _Out_ LPDWORD lpNum                      //实际输出字符串大小(指向输出最后一个字符的指针,用于计算输出的字符数量)
  );
wchar_t szstr3[15] = L"Hello 15PB!";         //设置(定义)要输出的wchar_t类型的字符串,
COORD pos1 = { 20, 20 };                     //定义一个坐标属性,并传出它的坐标参数{ 20, 20 }
if (!WriteConsoleOutputCharacter(hStdOut,szStr,15,pos1,&dwRet))//执行并判断插入的字符是否成功
{
  printf("插入字符失败");
}

/**************************************************设置文件颜色*******************************************************/
BOOL WINAPI WriteConsoleOutputAttribute      //设置控制台属性
  (
  _In_ HANDLE hConsoleOutput,              //设置控制台输出
  _In_ const WORD *lpAttribute,            //设置一个指向字符属性的固定WORD类型字符指针
  _In_ DWORD nLength,                      //设置一个用于计算字符数量的DWORD型数据
  _In_ COORD dwWriteCoord,                 //设置颜色输出的坐标
  _Out_ LPDWORD lpNumber                   //
  );
COORD pos2 = { 20, 20 };//设置在指定坐标参数
WORD wClr[10];          //设置一个数组将这个输出的长度上颜色
wmemset((wchar_t*) wClr, FOREGROUND_RED, 10);            //设置文本长度,颜色参数为:FOREGROUND_RED,
if (!WriteConsoleOutputAttribute(hStdOut, wClr, 8, pos2, &dwRet))//执行并判断是否设置颜色失败
{
  printf("设置颜色失败T_T\n");
}  
return 0;
}
运行得到的结果:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-4-3 15:42:12 | 显示全部楼层
忘了后面少了
CloseHandle(hStdIn);                                 //关闭输入句柄
CloseHandle(hStdOut);                              //关闭输出句柄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 21:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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