ncurses chgat 函数弄乱了行 graphics/acs 个字符

ncurses chgat function messes up line graphics/acs characters

我的 ncurses 程序使用 addch 绘制带有 ACS 字符的线条图形。例如,addch(ACS_VLINE)。然后,我使用 chgat 更改那里的属性(具体来说,我将字符设为粗体并更改颜色对)。但是,当发生这种情况时,屏幕上的行字符将替换为一个字母。例如,垂直线被替换为 x。看this page,好像是把换行符换成对应的acsc char。我如何让它不那样做?

我也犯了同样的错误。您丢失了一个属性 A_ALTCHARSET。特殊字符是一些具有属性 A_ALTCHARSET 的“普通”字符。当您屏蔽此属性时(或者如果您重置此标志),您会看到正常的字符。您需要阅读原始属性,如果它使用 A_ALTCHARSET 您需要重新设置它:

                if (mvwinch(menu->shadow_window, i, j) & A_ALTCHARSET)
                    mvwchgat(menu->shadow_window, i, j, 1,
                                shadow_attr | A_ALTCHARSET,
                                config->menu_shadow_cpn,
                                NULL);
                else
                    mvwchgat(menu->shadow_window, i, j, 1,
                                shadow_attr,
                                config->menu_shadow_cpn,
                                NULL);