⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clrcon.cpp

📁 关于大数运算的加 减 乘 除 模 等运算 运用了libtommath库的算法
💻 CPP
字号:
/*
    Helper console output func.
    BY CSK
    www.csksoft.net csk@live.com

*/
#include "clrcon.h"

static HANDLE std_out = INVALID_HANDLE_VALUE;
static WORD org_clr_info = NULL;


static inline void get_stdout()
{
    if (std_out == INVALID_HANDLE_VALUE)
    {
        std_out = GetStdHandle(STD_OUTPUT_HANDLE);
        if (std_out != INVALID_HANDLE_VALUE)
        {
          //  org_clr_info = 
            CONSOLE_SCREEN_BUFFER_INFO init_info;
            
            if   (GetConsoleScreenBufferInfo(std_out,  &init_info)) 
            {
                org_clr_info = init_info.wAttributes;
            }

        }
    }
}



namespace consolehelper{




BOOL clr_foregnd(WORD clr)
{
    CONSOLE_SCREEN_BUFFER_INFO init_info;
    WORD curr_clr_info;
    get_stdout();

    if   (!GetConsoleScreenBufferInfo(std_out,  &init_info)) return FALSE;
    curr_clr_info = init_info.wAttributes & (~(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED 
                                               ));
    curr_clr_info |= clr;
    return SetConsoleTextAttribute(std_out, curr_clr_info);

}

BOOL clr_bkgnd(WORD clr)
{
    get_stdout();
    CONSOLE_SCREEN_BUFFER_INFO init_info;
    WORD curr_clr_info;
    get_stdout();

    if   (!GetConsoleScreenBufferInfo(std_out,  &init_info)) return FALSE;
    curr_clr_info = init_info.wAttributes & (~( 
                                               BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED));
    if (clr & CON_CLR::RED)
    {
        curr_clr_info |= BACKGROUND_RED;
    }
    if (clr & CON_CLR::GREEN)
    {
        curr_clr_info |= BACKGROUND_GREEN;
    }
    if (clr & CON_CLR::BLUE)
    {
        curr_clr_info |= BACKGROUND_BLUE;
    }
    return SetConsoleTextAttribute(std_out, curr_clr_info);

}

BOOL clr_highlight(BOOL bHighlight, BOOL foregnd)
{
    get_stdout();
    CONSOLE_SCREEN_BUFFER_INFO init_info;
    WORD curr_clr_info;
    get_stdout();
    WORD selector = foregnd?FOREGROUND_INTENSITY:BACKGROUND_INTENSITY;
    if   (!GetConsoleScreenBufferInfo(std_out,  &init_info)) return FALSE;
    curr_clr_info = init_info.wAttributes & (~selector);
    
    curr_clr_info|= bHighlight?selector:0;
    return SetConsoleTextAttribute(std_out, curr_clr_info);


}

BOOL clr_underline(BOOL bUnderLine)
{
    get_stdout();
    CONSOLE_SCREEN_BUFFER_INFO init_info;
    WORD curr_clr_info;
    get_stdout();
   
    if   (!GetConsoleScreenBufferInfo(std_out,  &init_info)) return FALSE;
    curr_clr_info = init_info.wAttributes & (~COMMON_LVB_UNDERSCORE);
    
    curr_clr_info|= bUnderLine?COMMON_LVB_UNDERSCORE:0;
    return SetConsoleTextAttribute(std_out, curr_clr_info);


}

BOOL clr_reverse()
{
    get_stdout();
    CONSOLE_SCREEN_BUFFER_INFO init_info;
    WORD curr_clr_info = 0;
    get_stdout();
   
    if   (!GetConsoleScreenBufferInfo(std_out,  &init_info)) return FALSE;
    curr_clr_info = init_info.wAttributes & (~(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED  |
                                   BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | 
                                   FOREGROUND_INTENSITY | BACKGROUND_INTENSITY));
    if (init_info.wAttributes & BACKGROUND_RED)
    {
        curr_clr_info |= FOREGROUND_RED;
    }
    if (init_info.wAttributes & BACKGROUND_GREEN)
    {
        curr_clr_info |= FOREGROUND_GREEN;
    }
    if (init_info.wAttributes & BACKGROUND_BLUE)
    {
        curr_clr_info |= FOREGROUND_BLUE;
    }

    if (init_info.wAttributes &  FOREGROUND_RED)
    {
        curr_clr_info |= BACKGROUND_RED;
    }
    if (init_info.wAttributes &  FOREGROUND_GREEN)
    {
        curr_clr_info |= BACKGROUND_GREEN;
    }
    if (init_info.wAttributes &  FOREGROUND_BLUE)
    {
        curr_clr_info |= BACKGROUND_BLUE;
    }
    if (init_info.wAttributes &  FOREGROUND_INTENSITY)
    {
        curr_clr_info |= BACKGROUND_INTENSITY;
    }
    if (init_info.wAttributes &  BACKGROUND_INTENSITY)
    {
        curr_clr_info |= FOREGROUND_INTENSITY;
    }

    return SetConsoleTextAttribute(std_out, curr_clr_info);
}

VOID clr_restore()
{
    if (org_clr_info == NULL) return;
    get_stdout();
    SetConsoleTextAttribute(std_out,   org_clr_info);   

}

VOID con_cls()
{
    get_stdout();
    //from microsoft

    COORD coordScreen = { 0, 0 };    /* here's where we'll home the
                                        cursor */ 
    BOOL bSuccess;
    DWORD cCharsWritten;
    CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */ 
    DWORD dwConSize;                 /* number of character cells in
                                        the current buffer */ 

    /* get the number of character cells in the current buffer */ 

    bSuccess = GetConsoleScreenBufferInfo( std_out, &csbi );
   
    dwConSize = csbi.dwSize.X * csbi.dwSize.Y;

    /* fill the entire screen with blanks */ 

    bSuccess = FillConsoleOutputCharacter( std_out, (TCHAR) ' ',
       dwConSize, coordScreen, &cCharsWritten );
    

    /* get the current text attribute */ 

    bSuccess = GetConsoleScreenBufferInfo( std_out, &csbi );


    /* now set the buffer's attributes accordingly */ 

    bSuccess = FillConsoleOutputAttribute( std_out, csbi.wAttributes,
       dwConSize, coordScreen, &cCharsWritten );


    /* put the cursor at (0, 0) */ 

    bSuccess = SetConsoleCursorPosition( std_out, coordScreen );

    return;

}



}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -