- 3
- 0
- 约2.55千字
- 约 3页
- 2018-03-09 发布于河南
- 举报
控制台窗口界面的编程控制(四)
控制台窗口界面的编程控制(四) 七、滚动和移动 ScrollConsoleScreenBuffer是实现文本区滚动和移动的API函数。它可以将指定的一块文本区域移动到另一个区域,被移空的那块区域由指定字符填充。函数的原型如下:
BOOL ScrollConsoleScreenBuffer( HANDLE hConsoleOutput, // 句柄 CONST SMALL_RECT* lpScrollRectangle, // 要滚动或移动的区域 CONST SMALL_RECT* lpClipRectangle, // 裁剪区域 COORD dwDestinationOrigin, // 新的位置 CONST CHAR_INFO* lpFill // 填充字符); 利用这个API函数还可以实现删除指定行的操作。下面来举一个例子, HYPERLINK / \t _blank 程序如下:
#include #include #include HANDLE hOut;void DeleteLine(int row); // 删除一行void MoveText(int x, int y, SMALL_RECT rc); // 移动文本块区域void ClearScreen(void); // 清屏void main(){ hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄 WORD att = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE ; // 背景是蓝色,文本颜色是黄色 SetConsoleTextAttribute(hOut, att); ClearScreen(); printf(\n\nThe soul selects her own society,\n); printf(Then shuts the door;\n); printf(On her devine majority;\n); printf(Obtrude no more.\n\n); CONSOLE_SCREEN_BUFFER_INFO bInfo; GetConsoleScreenBufferInfo( hOut, bInfo ); COORD endPos = {0, bInfo.dwSize.Y - 1}; SetConsoleCursorPosition(hOut, endPos); // 设置光标位置 SMALL_RECT rc = {0, 2, 40, 5}; _getch(); MoveText(10, 5, rc); _getch(); DeleteLine(5); CloseHandle(hOut); // 关闭标准输出设备句柄}void DeleteLine(int row){ SMALL_RECT rcScroll, rcClip; COORD crDest = {0, row - 1}; CHAR_INFO chFill; CONSOLE_SCREEN_BUFFER_INFO bInfo; GetConsoleScreenBufferInfo( hOut, bInfo ); rcScroll.Left = 0; rcScroll.Top = row; rcScroll.Right = bInfo.dwSize.X - 1; rcScroll.Bottom = bInfo.dwSize.Y - 1; rcClip = rcScroll; chFill.Attributes = bInfo.wAttributes; chFill.Char.AsciiChar = ; ScrollConsoleScreenBuffer(hOut, rcScroll, rcClip, crDest, chFill);}void MoveText(int x, int y, SMALL_RECT rc){ COORD crDest = {x, y}; CHAR_INFO chFill; CONSOLE_SCREEN_BUFFER_INFO bInfo; GetConsoleScreenBufferInfo( hOut, bInfo ); chFill.Attributes = bInfo.wAttributes; chFill.Char.AsciiChar = ; ScrollConsoleScreenBuffer(
原创力文档

文档评论(0)