【C语言】控制台窗口图形界面编程(一)句柄和文本属性
00. 目錄
文章目錄
- 00. 目錄
- 01. 句柄
- 02. GetStdHandle函數
- 03. CloseHandle函數
- 04. SetConsoleTextAttribute函數
- 05. 十進制顏色對照表
- 06. 十六進制顏色對照表
01. 句柄
? 句柄是Windows最常用的概念。它通常用來標識Windows資源(如菜單、圖標、窗口等)和設備等對象。雖然可以把句柄理解為是一個指針變量類型,但它不是對象所在的地址指針,而是作為Windows系統內部表的索引值來使用的。
HANDLE在winnt.h中的聲明為
typedef void *HANDLE;
? 從上面可以看出HANDLE是一種無類型指針,句柄是處理對象的一個接口,你可以通過句柄去操作程序中所涉及的對象。在windows中,句柄是和對象一一對應的32位無符號整數值,對象可以映射到唯一的句柄,
? 句柄也可以映射到唯一的對象windows需要向程序員提供必要地編程接口,在這些接口中,允許程序員訪問,創建和銷毀對象,但是,出于封裝的考慮,windows并不想向程序員返回指針
? 如果作數據的話,句柄這種方式則允許你按自己的方式直接操作數據,但windows又不向你直接暴露數據。直接操作數據是程序員需要的,不暴露數據是windows所需要的,句柄封裝方式實現了各取所需。
? “句柄”是Windows最常用的概念。它通常用來標識Windows資源(如菜單、圖標、窗口等)和設備等對象。雖然可以把句柄理解為是一個指針變量類型,但它不是對象所在的地址指針,而是作為Windows系統內部表的索引值來使用的。
參考示例:
HANDLE hOut = NULL;深入了解Windows句柄到底是什么
02. GetStdHandle函數
函數相關說明
HANDLE WINAPI GetStdHandle(_In_ DWORD nStdHandle); 功能:獲取指定標準設備的句柄(標準輸入,標準輸出或標準錯誤) 參數:nStdHandle 標準設備。此參數可以是以下值之一。STD_INPUT_HANDLE(DWORD)-10 標準輸入設備。最初,這是控制臺輸入緩沖區STD_OUTPUT_HANDLE(DWORD)-11 標準輸出設備。最初,這是活動的控制臺屏幕緩沖區STD_ERROR_HANDLE(DWORD)-12 標準錯誤設備。最初,這是活動的控制臺屏幕緩沖區 返回值:如果函數成功,則返回值是指定設備的句柄,或者是先前調用SetStdHandle設置的重定向句柄。該句柄具有GENERIC_READ和GENERIC_WRITE訪問權限,除非應用程序使用SetStdHandle設置具有較少訪問權限的標準句柄。如果函數失敗,則返回值為INVALID_HANDLE_VALUE。要獲取擴展錯誤信息,請調用GetLastError。如果應用程序沒有關聯的標準句柄,例如在交互式桌面上運行的服務,并且未重定向它們,則返回值為NULL。在默認情況下:
標準輸入(stdin)----鍵盤
標準輸出(stdout)----顯示器(屏幕)
標準錯誤(stderr)----顯示器(屏幕)
注意:標準輸出句柄和標準錯誤句柄默認情況下都是對應的屏幕
參考代碼:
//定義句柄類型的變量HANDLE hOut = NULL;//獲取標準輸出句柄hOut = GetStdHandle(STD_OUTPUT_HANDLE);03. CloseHandle函數
函數相關說明
BOOL CloseHandle(HANDLE hObject); 功能:關閉一個打開的對象句柄 參數:hObject 打開對象的有效句柄 返回值:如果函數成功,則返回值為非零值。如果函數失敗,則返回值為零。要獲取擴展錯誤信息,請調用 GetLastError。參考代碼:
//關閉句柄CloseHandle(hOut);官方參考手冊
04. SetConsoleTextAttribute函數
設置控制臺文本屬性(顏色),可以設置前景色FOREGROUND(文本顏色)和背景色BACKGROUND
BOOL WINAPI SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes); 功能:設置控制臺文本屬性(顏色) 參數:hConsoleOutput: 控制臺屏幕緩沖區的句柄。句柄必須具有GENERIC_READ訪問權限。wAttributes: 字符屬性 返回值:如果函數成功,則返回值為非零值。如果函數失敗,則返回值為零。要獲取擴展錯誤信息,請調用GetLastError。**備注:**要確定屏幕緩沖區的當前顏色屬性,請調用GetConsoleScreenBufferInfo函數。
字符屬性可以分為兩類:顏色和DBCS。Wincon.h頭文件中定義了以下屬性。
| FOREGROUND_BLUE | 文字顏色包含藍色。 |
| FOREGROUND_GREEN | 文字顏色包含綠色。 |
| FOREGROUND_RED | 文字顏色包含紅色。 |
| FOREGROUND_INTENSITY | 文字顏色加強。 |
| BACKGROUND_BLUE | 背景顏色包含藍色。 |
| BACKGROUND_GREEN | 背景顏色包含綠色。 |
| BACKGROUND_RED | 背景顏色包含紅色。 |
| BACKGROUND_INTENSITY | 背景顏色加劇。 |
| COMMON_LVB_LEADING_BYTE | 前導字節。 |
| COMMON_LVB_TRAILING_BYTE | 尾隨字節。 |
| COMMON_LVB_GRID_HORIZONTAL | 頂部水平。 |
| COMMON_LVB_GRID_LVERTICAL | 左垂直。 |
| COMMON_LVB_GRID_RVERTICAL | 正確的垂直。 |
| COMMON_LVB_REVERSE_VIDEO | 反轉前景和背景屬性。 |
| COMMON_LVB_UNDERSCORE | 下劃線。 |
相關聲明
// // Attributes flags: //#define FOREGROUND_BLUE 0x0001 // text color contains blue. #define FOREGROUND_GREEN 0x0002 // text color contains green. #define FOREGROUND_RED 0x0004 // text color contains red. #define FOREGROUND_INTENSITY 0x0008 // text color is intensified. #define BACKGROUND_BLUE 0x0010 // background color contains blue. #define BACKGROUND_GREEN 0x0020 // background color contains green. #define BACKGROUND_RED 0x0040 // background color contains red. #define BACKGROUND_INTENSITY 0x0080 // background color is intensified. #define COMMON_LVB_LEADING_BYTE 0x0100 // Leading Byte of DBCS #define COMMON_LVB_TRAILING_BYTE 0x0200 // Trailing Byte of DBCS #define COMMON_LVB_GRID_HORIZONTAL 0x0400 // DBCS: Grid attribute: top horizontal. #define COMMON_LVB_GRID_LVERTICAL 0x0800 // DBCS: Grid attribute: left vertical. #define COMMON_LVB_GRID_RVERTICAL 0x1000 // DBCS: Grid attribute: right vertical. #define COMMON_LVB_REVERSE_VIDEO 0x4000 // DBCS: Reverse fore/back ground attribute. #define COMMON_LVB_UNDERSCORE 0x8000 // DBCS: Underscore.#define COMMON_LVB_SBCSDBCS 0x0300 // SBCS or DBCS flag.測試代碼:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h>#include <Windows.h>int main() {//定義句柄類型的變量HANDLE hOut = NULL;//獲取標準輸出句柄hOut = GetStdHandle(STD_OUTPUT_HANDLE);//設置文本屬性為青色SetConsoleTextAttribute(hOut, 10);printf("神馬程序員\n");//設置文本屬性為紅色SetConsoleTextAttribute(hOut, 12);printf("神馬程序員\n");//設置文本屬性為黃色SetConsoleTextAttribute(hOut, 14);printf("神馬程序員\n");SetConsoleTextAttribute(hOut, 3);printf("神馬程序員\n");//關閉句柄CloseHandle(hOut);system("pause");return 0; }執行結果
官方參考手冊
05. 十進制顏色對照表
06. 十六進制顏色對照表
《C語言控制臺窗口界面編程(修正版)》(建議大家看博客, 該文檔不推薦看)
CSDN下載地址:https://download.csdn.net/download/dengjin20104042056/11197571
總結
以上是生活随笔為你收集整理的【C语言】控制台窗口图形界面编程(一)句柄和文本属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Qt】Qt学习资料汇总
- 下一篇: 【C语言】控制台窗口图形界面编程(二)窗