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);
我的 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);