zoukankan      html  css  js  c++  java
  • C语言控制台窗口图形界面编程(四)

    <知识分享>

     文本颜色属性已经学会了,那么下面就学习几个比较常用的文本输出函数,如下:

    1. BOOL FillConsoleOutputAttribute(    // 填充字符属性  
    2. HANDLE hConsoleOutput,              // 句柄  
    3. WORD wAttribute,                    // 文本属性  
    4. DWORD nLength,                      // 个数  
    5. COORD dwWriteCoord,                 // 开始位置  
    6. LPDWORD lpNumberOfAttrsWritten      // 返回填充的个数  
    7. );  
    8. BOOL FillConsoleOutputCharacter(    // 填充指定数据的字符  
    9. HANDLE hConsoleOutput,              // 句柄  
    10. TCHAR cCharacter,                   // 字符  
    11. DWORD nLength,                      // 字符个数  
    12. COORD dwWriteCoord,                 // 起始位置  
    13. LPDWORD lpNumberOfCharsWritten      // 已写个数  
    14. );  
    15. BOOL WriteConsoleOutputCharacter(   // 在指定位置处插入指定数量的字符  
    16. HANDLE hConsoleOutput,              // 句柄  
    17. LPCTSTR lpCharacter,                // 字符串  
    18. DWORD nLength,                      // 字符个数  
    19. COORD dwWriteCoord,                 // 起始位置  
    20. LPDWORD lpNumberOfCharsWritten      // 已写个数  
    21. );  

           另外再介绍一个表示区域的结构体,如下:

    1. typedef struct _SMALL_RECT  //表示矩形区域的结构体  
    2. {  
    3.   SHORT Left;       //左边界  
    4.   SHORT Top;        //上边界  
    5.   SHORT Right;      //右边界  
    6.   SHORT Bottom;     //下边界  
    7. } SMALL_RECT;  
    8. /* 
    9. 微软官方的说法是 
    10. Left    区域的左上顶点的X坐标 
    11. Top     区域的左上顶点的Y坐标 
    12. Right   区域的右下顶点的X坐标 
    13. Bottom  区域的右下顶点的Y坐标 
    14. */  

           通过以上的文本输出函数,我们来做一个简单的在一个具有阴影效果的窗口显示字符串的示例程序,如下:

    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3. #include <Windows.h>  
    4. #include <conio.h>  
    5.   
    6. int main()  
    7. {  
    8.     char *str = "Hello World!";     //定义输出信息  
    9.     int len = strlen(str), i;  
    10.     WORD shadow = BACKGROUND_INTENSITY;     //阴影属性  
    11.     WORD text = BACKGROUND_GREEN | BACKGROUND_INTENSITY;    //文本属性  
    12.     HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);    //获得标准输出设备句柄  
    13.     CONSOLE_SCREEN_BUFFER_INFO csbi;    //定义窗口缓冲区信息结构体  
    14.     GetConsoleScreenBufferInfo(handle_out, &csbi);  //获得窗口缓冲区信息  
    15.     SMALL_RECT rc;      //定义一个文本框输出区域  
    16.     COORD posText;      //定义文本框的起始坐标  
    17.     COORD posShadow;    //定义阴影框的起始坐标  
    18.     //确定区域的边界  
    19.     rc.Top = 8;     //上边界  
    20.     rc.Bottom = rc.Top + 4;     //下边界  
    21.     rc.Left = (csbi.dwSize.X - len) / 2 - 2;    //左边界,为了让输出的字符串居中  
    22.     rc.Right = rc.Left + len + 4;   //右边界  
    23.     //确定文本框起始坐标  
    24.     posText.X = rc.Left;  
    25.     posText.Y = rc.Top;  
    26.     //确定阴影框的起始坐标  
    27.     posShadow.X = posText.X + 1;  
    28.     posShadow.Y = posText.Y + 1;  
    29.     for (i=0; i<5; ++i)     //先输出阴影框  
    30.     {  
    31.         FillConsoleOutputAttribute(handle_out, shadow, len + 4, posShadow, NULL);  
    32.         posShadow.Y++;  
    33.     }  
    34.     for (i=0; i<5; ++i)     //在输出文本框,其中与阴影框重合的部分会被覆盖掉  
    35.     {  
    36.         FillConsoleOutputAttribute(handle_out, text, len + 4, posText, NULL);  
    37.         posText.Y++;  
    38.     }  
    39.     //设置文本输出处的坐标  
    40.     posText.X = rc.Left + 2;  
    41.     posText.Y = rc.Top + 2;  
    42.     WriteConsoleOutputCharacter(handle_out, str, len, posText, NULL);   //输出字符串  
    43.     SetConsoleTextAttribute(handle_out, csbi.wAttributes);   // 恢复原来的属性  
    44.     CloseHandle(handle_out);  
    45.     return 0;  
    46. }  

           以上样例在Code::Blocks 13.12中编译通过。

  • 相关阅读:
    8088汇编跳转和PSW状态字寄存器
    Delphi的函数指针
    服务器系统及软件常见漏洞
    TGraphiControl响应WM_MOUSEMOVE的过程(以TPaintBox为例)good
    两个奇怪的取地址符号
    把x指针指向的4个字节次序颠倒过来
    DELPHI中的消息处理机制(三种消息处理方法的比较,如何截断消息)
    探索C++的底层机制
    setprecision、fixed、showpoint的用法总结(经典!!超经典!!)
    段寄存器和8种地址寻址方式
  • 原文地址:https://www.cnblogs.com/lxl0928/p/3793475.html
Copyright © 2011-2022 走看看