控制文本的移動是控制台視窗介面編程的一個很重要的功能,有了這個功能我們可以實現介面的滾動。下面我們介紹一個控制文本移動的函數,如下:
BOOL ScrollConsoleScreenBuffer( //文本移動函數 HANDLE hConsoleOutput, //控制代碼 const SMALL_RECT *lpScrollRectangle, //移動地區 const SMALL_RECT *lpClipRectangle, //裁剪地區,如果為NULL,那麼將代表整個螢幕緩衝區 COORD dwDestinationOrigin, //移動到的位置,這個點將成為移動地區的左上頂點 const CHAR_INFO *lpFill //空出地區的填充字元 );
下面來看一個移動文本的範例程式,如下
#include <stdio.h> #include <conio.h> #include <Windows.h> #include <stdlib.h> int main() { HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //獲得標準輸出裝置控制代碼 CONSOLE_SCREEN_BUFFER_INFO csbi; //定義視窗緩衝區資訊結構體 SMALL_RECT scroll; //定義移動地區 COORD pos = {0, 5}; //移動位置 CHAR_INFO chFill; //定義填充字元 GetConsoleScreenBufferInfo(handle_out, &csbi); //獲得視窗緩衝區資訊 //定義填充字元的各個參數及屬性 chFill.Char.AsciiChar = ' '; chFill.Attributes = csbi.wAttributes; //輸出文本 printf("00000000000000000000000000000\n"); printf("11111111111111111111111111111\n"); printf("22222222222222222222222222222\n"); printf("33333333333333333333333333333\n"); //確定地區 scroll.Left = 1; scroll.Top = 1; scroll.Right = 10; scroll.Bottom = 2; ScrollConsoleScreenBuffer(handle_out, &scroll, NULL, pos, &chFill); //移動文本 return 0; }
在上面的範例程式中,裁剪地區是整個控制台視窗的螢幕緩衝區,現在如果我們把裁剪地區設定為與移動地區一樣,也就是說ScrollConsoleScreenBuffer函數的第三個參數也改成&scroll,那麼結果會怎麼樣呢?
本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/C/