日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C语言】控制台窗口图形界面编程(一)句柄和文本属性

發布時間:2024/4/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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语言】控制台窗口图形界面编程(一)句柄和文本属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。