【C语言】控制台窗口图形界面编程(四):文本输出
00. 目錄
文章目錄
- 00. 目錄
- 01. FillConsoleOutputAttribute函數(shù)
- 02. FillConsoleOutputCharacter函數(shù)
- 03. WriteConsoleOutputCharacter函數(shù)
- 04. 綜合實(shí)例
01. FillConsoleOutputAttribute函數(shù)
設(shè)置指定數(shù)量的字符單元格的字符屬性,從屏幕緩沖區(qū)中的指定坐標(biāo)開(kāi)始。
函數(shù)聲明:
設(shè)置指定數(shù)量的字符單元格的字符屬性BOOL WINAPI FillConsoleOutputAttribute(_In_ HANDLE hConsoleOutput,_In_ WORD wAttribute,_In_ DWORD nLength,_In_ COORD dwWriteCoord,_Out_ LPDWORD lpNumberOfAttrsWritten ); 功能:設(shè)置指定數(shù)量的字符單元格的字符屬性 參數(shù):hConsoleOutput 控制臺(tái)屏幕緩沖區(qū)的句柄。句柄必須具有GENERIC_WRITE訪問(wèn)權(quán)限。wAttribute 寫(xiě)入控制臺(tái)屏幕緩沖區(qū)時(shí)要使用的屬性。nLength 要設(shè)置為指定顏色屬性的字符單元格數(shù)。dwWriteCoord 指定字符坐標(biāo)的開(kāi)始位置lpNumberOfAttrsWritten 指向變量的指針,該變量接收實(shí)際設(shè)置了屬性的字符單元格數(shù)。返回值:如果函數(shù)成功,則返回值為非零值。如果函數(shù)失敗,則返回值為零。要獲取擴(kuò)展錯(cuò)誤信息,請(qǐng)調(diào)用GetLastError。參考程序:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h>#include <Windows.h>#define N 255int main() {int i = 0;int len = 0;char *str = "神馬程序員";//定義句柄類(lèi)型的變量HANDLE hOut = NULL;//窗口信息結(jié)構(gòu)體CONSOLE_SCREEN_BUFFER_INFO screenInfo;//開(kāi)始位置COORD posShadow;//獲取標(biāo)準(zhǔn)輸出句柄hOut = GetStdHandle(STD_OUTPUT_HANDLE);//獲取窗口信息結(jié)構(gòu)體GetConsoleScreenBufferInfo(hOut, &screenInfo);//長(zhǎng)度len = strlen(str) + 1;posShadow.X = 8;posShadow.Y = 8;//BACKGROUND_INTENSITY 灰色屬性FillConsoleOutputAttribute(hOut, BACKGROUND_INTENSITY, len + 4, posShadow, NULL);getchar();//關(guān)閉句柄CloseHandle(hOut);system("pause");return 0; }執(zhí)行效果
第8行第8列開(kāi)始顯示 長(zhǎng)度為len + 4 屬性為灰色
官方參考手冊(cè):https://docs.microsoft.com/en-us/windows/console/fillconsoleoutputattribute
02. FillConsoleOutputCharacter函數(shù)
從指定的坐標(biāo)開(kāi)始,將一個(gè)字符按照指定的次數(shù)寫(xiě)入控制臺(tái)屏幕緩沖區(qū)。
函數(shù)聲明:
BOOL WINAPI FillConsoleOutputCharacter(_In_ HANDLE hConsoleOutput,_In_ TCHAR cCharacter,_In_ DWORD nLength,_In_ COORD dwWriteCoord,_Out_ LPDWORD lpNumberOfCharsWritten ); 功能:填充指定次數(shù)的字符 參數(shù):hConsoleOutput 控制臺(tái)屏幕緩沖區(qū)的句柄。句柄必須具有GENERIC_WRITE訪問(wèn)權(quán)限。cCharacter 要寫(xiě)入控制臺(tái)屏幕緩沖區(qū)的字符。nLength 應(yīng)寫(xiě)入字符的字符單元格數(shù)。dwWriteCoord 指定字符坐標(biāo)到的字符是要被寫(xiě)入的開(kāi)始位置。lpNumberOfCharsWritten 指向變量的指針,該變量接收實(shí)際寫(xiě)入控制臺(tái)屏幕緩沖區(qū)的字符數(shù)。返回值:如果函數(shù)成功,則返回值為非零值。如果函數(shù)失敗,則返回值為零。要獲取擴(kuò)展錯(cuò)誤信息,請(qǐng)調(diào)用GetLastError。參考程序:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h>#include <Windows.h>#define N 255int main() {int i = 0;int len = 0;char *str = "神馬程序員";//定義句柄類(lèi)型的變量HANDLE hOut = NULL;//窗口信息結(jié)構(gòu)體CONSOLE_SCREEN_BUFFER_INFO screenInfo;//開(kāi)始位置COORD posShadow;//獲取標(biāo)準(zhǔn)輸出句柄hOut = GetStdHandle(STD_OUTPUT_HANDLE);//獲取窗口信息結(jié)構(gòu)體GetConsoleScreenBufferInfo(hOut, &screenInfo);//開(kāi)始位置 COORD pos = {0, 0};//填充指定數(shù)字的字符FillConsoleOutputCharacter(hOut, 'B', screenInfo.dwSize.X * 4, pos, NULL);getchar();//關(guān)閉句柄CloseHandle(hOut);system("pause");return 0; }執(zhí)行結(jié)果:
填充四行
官方參考手冊(cè): https://docs.microsoft.com/en-us/windows/console/fillconsoleoutputcharacter
03. WriteConsoleOutputCharacter函數(shù)
從指定位置開(kāi)始,將多個(gè)字符復(fù)制到控制臺(tái)屏幕緩沖區(qū)的連續(xù)單元格。
函數(shù)聲明:
BOOL WINAPI WriteConsoleOutputCharacter(_In_ HANDLE hConsoleOutput,_In_ LPCTSTR lpCharacter,_In_ DWORD nLength,_In_ COORD dwWriteCoord,_Out_ LPDWORD lpNumberOfCharsWritten );功能:從指定位置開(kāi)始,將多個(gè)字符復(fù)制到控制臺(tái)屏幕緩沖區(qū)的連續(xù)單元格。 參數(shù):hConsoleOutput 控制臺(tái)屏幕緩沖區(qū)的句柄。句柄必須具有GENERIC_WRITE訪問(wèn)權(quán)限。lpCharacter 要寫(xiě)入控制臺(tái)屏幕緩沖區(qū)的字符串。nLength 要寫(xiě)入的字符數(shù)。dwWriteCoord 起始位置lpNumberOfCharsWritten 指向接收實(shí)際寫(xiě)入的字符數(shù)的變量的指針。返回值:如果函數(shù)成功,則返回值為非零值。如果函數(shù)失敗,則返回值為零。要獲取擴(kuò)展錯(cuò)誤信息,請(qǐng)調(diào)用GetLastError。參考程序:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h>#include <Windows.h>#define N 255int main() {int i = 0;int len = 0;char *str = "a";//定義句柄類(lèi)型的變量HANDLE hOut = NULL;//窗口信息結(jié)構(gòu)體CONSOLE_SCREEN_BUFFER_INFO screenInfo;//開(kāi)始位置COORD posShadow;//獲取標(biāo)準(zhǔn)輸出句柄hOut = GetStdHandle(STD_OUTPUT_HANDLE);//獲取窗口信息結(jié)構(gòu)體GetConsoleScreenBufferInfo(hOut, &screenInfo);//開(kāi)始位置 COORD pos = {0, 0};//填充指定數(shù)字的字符len = strlen(str);WriteConsoleOutputCharacter(hOut, str, len, pos, NULL);getchar();//關(guān)閉句柄CloseHandle(hOut);system("pause");return 0; }執(zhí)行結(jié)果:
官方參考手冊(cè): https://docs.microsoft.com/en-us/windows/console/writeconsoleoutputcharacter
04. 綜合實(shí)例
參考程序:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h>#include <Windows.h> #include <conio.h>int main() {//定義輸出信息char *str = "Hello World!"; int i;int len = strlen(str);//陰影屬性WORD shadow = BACKGROUND_INTENSITY; //文本屬性WORD text = BACKGROUND_GREEN | BACKGROUND_INTENSITY; //獲得標(biāo)準(zhǔn)輸出設(shè)備句柄HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //定義窗口緩沖區(qū)信息結(jié)構(gòu)體CONSOLE_SCREEN_BUFFER_INFO screenInfo; //獲得窗口緩沖區(qū)信息GetConsoleScreenBufferInfo(hOut, &screenInfo); //定義一個(gè)文本框輸出區(qū)域SMALL_RECT rc; //定義文本框的起始坐標(biāo)COORD posText; //定義陰影框的起始坐標(biāo)COORD posShadow; //確定區(qū)域的邊界rc.Top = 8; //上邊界rc.Bottom = rc.Top + 4; //下邊界rc.Left = (screenInfo.dwSize.X - len) / 2 - 2; //左邊界,為了讓輸出的字符串居中rc.Right = rc.Left + len + 4; //右邊界//確定文本框起始坐標(biāo)posText.X = rc.Left;posText.Y = rc.Top;//確定陰影框的起始坐標(biāo)posShadow.X = posText.X + 1;posShadow.Y = posText.Y + 1;for (i = 0; i < 5; ++i) //先輸出陰影框{FillConsoleOutputAttribute(hOut, shadow, len + 4, posShadow, NULL);posShadow.Y++;}for (i = 0; i < 5; ++i) //在輸出文本框,其中與陰影框重合的部分會(huì)被覆蓋掉{FillConsoleOutputAttribute(hOut, text, len + 4, posText, NULL);posText.Y++;}//設(shè)置文本輸出處的坐標(biāo)posText.X = rc.Left + 2;posText.Y = rc.Top + 2;WriteConsoleOutputCharacter(hOut, str, len, posText, NULL); //輸出字符串getchar();SetConsoleTextAttribute(hOut, screenInfo.wAttributes); // 恢復(fù)原來(lái)的屬性CloseHandle(hOut);system("pause");return 0; }總結(jié)
以上是生活随笔為你收集整理的【C语言】控制台窗口图形界面编程(四):文本输出的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【C语言】控制台窗口图形界面编程(三)窗
- 下一篇: 【C语言】控制台窗口图形界面编程(五):