You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MFC CRichEditCtrl控件中正常显示尺寸合适的二维码

解决方案

你遇到的问题核心是三个原因:未全选内容就设置格式、选用的字体对二维码字符支持差、未匹配设置行间距导致行列错位,按照以下步骤修改即可:

1. 先关闭富编辑控件自动换行

避免二维码因控件宽度不足被强制折行打乱结构:

// 禁用自动换行,设置为无限宽度
::SendMessage(m_editQR.m_hWnd, EM_SETTARGETDEVICE, (WPARAM)NULL, 0);

2. 插入二维码文本后统一设置格式

先全选所有内容,再设置字符格式,优先选用对Unicode方块元素支持完善的等宽字体(Consolas、黑体都可),最后同步设置段落行间距和字符高度匹配:

// 插入二维码文本后执行以下代码
// 全选所有内容
m_editQR.SetSel(0, -1);

CHARFORMAT selCharformat = {0};
selCharformat.cbSize = sizeof(CHARFORMAT);
selCharformat.dwMask = CFM_FACE | CFM_SIZE | CFM_CHARSET | CFM_WEIGHT;
// 字号按需调整,yHeight单位为缇,1磅=20缇,以下是8号字的配置
selCharformat.yHeight = 8 * 20;
selCharformat.bCharSet = DEFAULT_CHARSET;
selCharformat.bPitchAndFamily = FIXED_PITCH | FF_MODERN;
// 选用Consolas等宽字体,不要用Console字体
lstrcpy(selCharformat.szFaceName, _T("Consolas"));
selCharformat.wWeight = FW_NORMAL;

m_editQR.SetSelectionCharFormat(selCharformat);

// 设置段落格式,匹配行间距避免行列错位
PARAFORMAT2 pf = {0};
pf.cbSize = sizeof(PARAFORMAT2);
pf.dwMask = PFM_LINESPACING | PFM_SPACEBEFORE | PFM_SPACEAFTER;
pf.bLineSpacingRule = 1;
// 行间距和字符高度保持一致
pf.dyLineSpacing = selCharformat.yHeight;
pf.dySpaceBefore = 0;
pf.dySpaceAfter = 0;
m_editQR.SetParaFormat(pf);

// 取消选中,光标移到开头
m_editQR.SetSel(0, 0);

注意事项

  • 调整二维码大小只需修改selCharformat.yHeight的取值即可,保持和pf.dyLineSpacing一致就不会出现错位
  • 不要使用非等宽字体,会导致字符宽度不一致,二维码结构错乱

内容的提问来源于stack exchange,提问作者MrWarrior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:36:03