随机像素出现在控制台窗口中

时间:2016-09-03 16:34:41

标签: c windows

我正在编写一个C Windows控制台应用程序,屏幕上有时会出现奇怪的像素。

更具体地说,应用程序在屏幕上以不同颜色写入和删除字符,有时它似乎无法完全删除它们,而是留下一个像素。

我专门用于打印的功能是:

STATIC
STATUS
PositionPrint(
    __in    COORD           tPosition,
    __in    WORD            wColorAttributes,
    __in    TCHAR           cChar
    )
{
    SNOWFLAKE__STATUS   eRetval         =   STATUS_INVALID;
    BOOL                bConsoleRetval  =   FALSE;

    bConsoleRetval = SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), tPosition);
    RETVAL_CHECK(
        bConsoleRetval,
        STATUS_SET_CONSOLE_CURSOR_POSITION_FAILED,
        "SetConsoleCursorPosition failed"
    );

    bConsoleRetval = SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColorAttributes);
    RETVAL_CHECK(
        bConsoleRetval,
        STATUS_SET_CONSOLE_TEXT_ATTRIBUTES_FAILED,
        "SetConsoleTextAttribute failed"
    );

    _tcprintf(_T("%c"), cChar);
lblCleanup:
    return eRetval;
}

RETVAL_CHECK宏(以防万一):

#ifdef _DEBUG
#define DEBUG_PRINT(message) (printf("%s %d %s %d %s\n", __FILE__, __LINE__, __FUNCTION__, GetLastError(), (message)))
#else
#define DEBUG_PRINT(message)
#endif

#define RETVAL_CHECK(_condition, _error, _message)   \
do                                                   \
{                                                    \
    if (!(_condition))                               \
    {                                                \
        eRetval = (_error);                          \
        DEBUG_PRINT(_message);                       \
        goto lblCleanup;                             \
    }                                                \
} while (0,0)

要删除字符,我只需在同一位置打印一个空格。

我的电脑上有Windows 10。

有没有人知道导致问题的原因或解决方法?

1 个答案:

答案 0 :(得分:0)

我认为这只是我的字体问题 我将默认的CMD字体设置为Courier New(希伯来语支持) 将它改回Lucida Console似乎已经解决了这个问题。