科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件控制台窗口界面的编程控制(三)

控制台窗口界面的编程控制(三)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

下面看一个示例程序……

作者:丁有和 来源:yesky 2007年10月30日

关键字: 控制台 窗口界面 编程 Linux

  • 评论
  • 分享微博
  • 分享邮件
六、文本操作示例

  下面看一个示例程序:

 

 

 

 

 

#include <windows.h>
HANDLE hOut;
void ShadowWindowLine(char *str); // 在具有阴影效果的窗口中显示一行字符,窗口为居中显示
void DrawBox(bool bSingle, SMALL_RECT rc); // 绘制边框
void main()
{
 hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄
 SetConsoleOutputCP(437); // 设置代码页
 ShadowWindowLine("Display a line of words, and center the window with shadow.");
 CloseHandle(hOut); // 关闭标准输出设备句柄
}

void ShadowWindowLine(char *str)
{
 CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息
 GetConsoleScreenBufferInfo( hOut, &bInfo ); // 获取窗口缓冲区信息
 // 计算显示窗口大小和位置
 int x1, y1, x2, y2, chNum = strlen(str);
 x1 = (bInfo.dwSize.X - chNum)/2 - 2;
 y1 = bInfo.dwSize.Y/2 - 2;
 x2 = x1 + chNum + 4;
 y2 = y1 + 5;
 WORD att1 = BACKGROUND_INTENSITY; // 阴影属性
 WORD att0 = FOREGROUND_RED |FOREGROUND_GREEN |FOREGROUND_BLUE |  
       FOREGROUND_INTENSITY |
       BACKGROUND_RED | BACKGROUND_BLUE; // 文本属性

 WORD attText = FOREGROUND_RED |FOREGROUND_INTENSITY; // 文本属性
 // 设置阴影
 COORD posShadow = {x1+1, y1+1}, posText = {x1, y1};
 for (int i=0; i<5; i++){
  FillConsoleOutputAttribute(hOut, att1, chNum + 4, posShadow, NULL);
  posShadow.Y++;
 }
 // 填充窗口背景
 for (i=0; i<5; i++){
  FillConsoleOutputAttribute(hOut, att0, chNum + 4, posText, NULL);
  posText.Y++;
 }
 // 写文本和边框
 posText.X = x1 + 2;
 posText.Y = y1 + 2;
 WriteConsoleOutputCharacter(hOut, str, strlen(str), posText, NULL);
 SMALL_RECT rc = {x1, y1, x2-1, y2-1};
 DrawBox(true, rc);
 SetConsoleTextAttribute(hOut, bInfo.wAttributes); // 恢复原来的属性
}

void DrawBox(bool bSingle, SMALL_RECT rc)
{
 char chBox[6];
 if (bSingle) {
  chBox[0] = (char)0xda; // 左上角点
  chBox[1] = (char)0xbf; // 右上角点
  chBox[2] = (char)0xc0; // 左下角点
  chBox[3] = (char)0xd9; // 右下角点
  chBox[4] = (char)0xc4; // 水平
  chBox[5] = (char)0xb3; // 坚直
 } else {
  chBox[0] = (char)0xc9; // 左上角点
  chBox[1] = (char)0xbb; // 右上角点
  chBox[2] = (char)0xc8; // 左下角点
  chBox[3] = (char)0xbc; // 右下角点
  chBox[4] = (char)0xcd; // 水平
  chBox[5] = (char)0xba; // 坚直
 }
 COORD pos = {rc.Left, rc.Top};
 WriteConsoleOutputCharacter(hOut, &chBox[0], 1, pos, NULL);

 for (pos.X = rc.Left + 1; pos.X  WriteConsoleOutputCharacter(hOut, &chBox[4], 1, pos, NULL);

 pos.X = rc.Right;
 WriteConsoleOutputCharacter(hOut, &chBox[1], 1, pos, NULL);

 for (pos.Y = rc.Top+1; pos.Y {
  pos.X = rc.Left;
  WriteConsoleOutputCharacter(hOut, &chBox[5], 1, pos, NULL);
  pos.X = rc.Right;
  WriteConsoleOutputCharacter(hOut, &chBox[5], 1, pos, NULL);
 }
 pos.X = rc.Left; pos.Y = rc.Bottom;
 WriteConsoleOutputCharacter(hOut, &chBox[2], 1, pos, NULL);
 
 for (pos.X = rc.Left + 1; pos.X  WriteConsoleOutputCharacter(hOut, &chBox[4], 1, pos, NULL);

 pos.X = rc.Right;
 WriteConsoleOutputCharacter(hOut, &chBox[3], 1, pos, NULL);
}
 
  程序运行结果如下图所示。
控制台窗口程序运行结果 
  需要说明的是,上述程序在不同的字符代码页面(code page)下显示的结果是不同的。例如,中文Windows操作系统的默认代码页是简体中文(936),在该代码页面下值超过128的单字符在Windows NT/XP是显示不出来的。下表列出了可以使用的代码页。

代码页(Code page) 说 明
1258 越南文
1257 波罗的海文
1256 阿拉伯文
1255 希伯来文
1254 土耳其语
1253 希腊文
1252 拉丁文(ANSI)
1251 斯拉夫文
1250 中欧文
950 繁体中文
949 韩文
936 简体中文
932 日文
874 泰文
850 使用多种语言(MS-DOS拉丁文)
437 MS-DOS美语/英语

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章