扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
#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 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 pos.X = rc.Right; WriteConsoleOutputCharacter(hOut, &chBox[3], 1, pos, NULL); } |
代码页(Code page) | 说 明 |
1258 | 越南文 |
1257 | 波罗的海文 |
1256 | 阿拉伯文 |
1255 | 希伯来文 |
1254 | 土耳其语 |
1253 | 希腊文 |
1252 | 拉丁文(ANSI) |
1251 | 斯拉夫文 |
1250 | 中欧文 |
950 | 繁体中文 |
949 | 韩文 |
936 | 简体中文 |
932 | 日文 |
874 | 泰文 |
850 | 使用多种语言(MS-DOS拉丁文) |
437 | MS-DOS美语/英语 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者