Small_Boy 发表于 2015-4-3 14:59:47

分享对控制台的学习

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

intmain(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 = 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;          //设置一个数组将这个输出的长度上颜色
wmemset((wchar_t*) wClr, FOREGROUND_RED, 10);            //设置文本长度,颜色参数为:FOREGROUND_RED,
if (!WriteConsoleOutputAttribute(hStdOut, wClr, 8, pos2, &dwRet))//执行并判断是否设置颜色失败
{
printf("设置颜色失败T_T\n");
}
return 0;
}
运行得到的结果:

Small_Boy 发表于 2015-4-3 15:42:12

忘了后面少了
CloseHandle(hStdIn);                                 //关闭输入句柄
CloseHandle(hStdOut);                              //关闭输出句柄
页: [1]
查看完整版本: 分享对控制台的学习