国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

控制臺窗口界面的編程控制(二)

2019-11-17 05:45:11
字體:
來源:轉載
供稿:網友

  三、控制臺窗口操作

  用于控制臺窗口操作的API函數如下:


GetConsoleScreenBufferInfo 獲取控制臺窗口信息
GetConsoleTitle 獲取控制臺窗口標題
ScrollConsoleScreenBuffer 在緩沖區中移動數據塊
SetConsoleScreenBufferSize 更改指定緩沖區大小
SetConsoleTitle 設置控制臺窗口標題
SetConsoleWindowInfo 設置控制臺窗口信息

  此外,還有窗口字體、顯示模式等控制函數,這里不再細說。下列舉一個示例,程序如下:

#include
#include
#include
void main()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
// 獲取標準輸出設備句柄
CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口緩沖區信息
GetConsoleScreenBufferInfo(hOut, bInfo );
// 獲取窗口緩沖區信息
char strTitle[255];
GetConsoleTitle(strTitle, 255); // 獲取窗口標題
_getch();
SetConsoleTitle("控制臺窗口操作"); // 獲取窗口標題
_getch();
COORD size = {80, 25};
SetConsoleScreenBufferSize(hOut,size); // 重新設置緩沖區大小
_getch();
SMALL_RECT rc = {0,0, 80-1, 25-1}; // 重置窗口位置和大小
SetConsoleWindowInfo(hOut,true ,&rc);
CloseHandle(hOut); // 關閉標準輸出設備句柄
}
  需要說明的是,控制臺窗口的原點坐標是(0, 0),而最大的坐標是緩沖區大小減1,例如當緩沖區大小為80*25時,其最大的坐標是(79, 24)。

  四、文本屬性操作

  與DOS字符相似,控制臺窗口中的字符也有相應的屬性。這些屬性分為:文本的前景色、背景色和雙字節字符集(DBCS)屬性三種。事實上,我們最關心是文本顏色,這樣可以構造出美觀的界面。顏色屬性都是一些預定義標識:

FOREGROUND_BLUE 藍色
FOREGROUND_GREEN 綠色
FOREGROUND_RED 紅色
FOREGROUND_INTENSITY 加強
BACKGROUND_BLUE 藍色背景
BACKGROUND_GREEN 綠色背景
BACKGROUND_RED 紅色背景
BACKGROUND_INTENSITY 背景色加強
COMMON_LVB_REVERSE_VIDEO 反色

  與文本屬性相關的主要函數有:

BOOL FillConsoleOutputAttribute( // 填充字符屬性
HANDLE hConsoleOutput, // 句柄
Word wAttribute, // 文本屬性
DWORD nLength, // 個數
COORD dwWriteCoord, // 開始位置
LPDWORD lpNumberOfAttrsWritten // 返回填充的個數
);

BOOL SetConsoleTextAttribute( // 設置WriteConsole等函數的字符屬性
HANDLE hConsoleOutput, // 句柄
WORD wAttributes // 文本屬性
);

BOOL WriteConsoleOutputAttribute( // 在指定位置處寫屬性
HANDLE hConsoleOutput, // 句柄
CONST WORD *lpAttribute, // 屬性
DWORD nLength, // 個數
COORD dwWriteCoord, // 起始位置
LPDWORD lpNumberOfAttrsWritten // 已寫個數
);

  另外,獲取當前控制臺窗口的文本屬性是通過調用函數GetConsoleScreenBufferInfo后,在CONSOLE_SCREEN_ BUFFER_INFO結構成員wAttributes中得到。

  五、文本輸出

  文本輸出函數有:

BOOL FillConsoleOutputCharacter( // 填充指定數據的字符
HANDLE hConsoleOutput, // 句柄
TCHAR cCharacter, // 字符
DWORD nLength, // 字符個數
COORD dwWriteCoord, // 起始位置
LPDWORD lpNumberOfCharsWritten // 已寫個數
);

BOOL WriteConsole( // 在當前光標位置處插入指定數量的字符
HANDLE hConsoleOutput, // 句柄
CONST VOID *lpBuffer, // 字符串
DWORD nNumberOfCharsToWrite, // 字符個數
LPDWORD lpNumberOfCharsWritten, // 已寫個數
LPVOID lpReserved // 保留
);

BOOL WriteConsoleOutput( // 向指定區域寫帶屬性的字符
HANDLE hConsoleOutput, // 句柄
CONST CHAR_INFO *lpBuffer, // 字符數據區
COORD dwBufferSize, // 數據區大小
COORD dwBufferCoord, // 起始坐標
PSMALL_RECT lpWriteRegion // 要寫的區域
);

BOOL WriteConsoleOutputCharacter( // 在指定位置處插入指定數量的字符
HANDLE hConsoleOutput, // 句柄
LPCTSTR lpCharacter, // 字符串
DWORD nLength, // 字符個數
COORD dwWriteCoord, // 起始位置
LPDWORD lpNumberOfCharsWritten // 已寫個數
);

  可以看出:WriteConsoleOutput函數功能相當于SetConsoleTextAttribute和WriteConsole的功能。而WriteConsoleOutputCharacter函數相當于SetConsoleCursorPosition(設置光標位置)和WriteConsole的功能。不過在具體使用要注重它們的區別。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 藁城市| 临颍县| 鹿泉市| 鹤庆县| 永登县| 卓尼县| 宁晋县| 会同县| 仁寿县| 兴宁市| 通榆县| 克拉玛依市| 缙云县| 洪雅县| 宝山区| 梁山县| 兴文县| 海原县| 贵阳市| 驻马店市| 天津市| 郴州市| 昌都县| 阳江市| 仙居县| 红原县| 清丰县| 乡城县| 阜新| 分宜县| 义乌市| 渝中区| 荥经县| 垣曲县| 疏附县| 舞钢市| 葫芦岛市| 舞阳县| 神农架林区| 新丰县| 浠水县|