RichEdit2.0 + Unicode工程 显示字体大小不一致

shedawei 2017-12-06 09:27:38
相同的代码在多字节工程下就正常,在Unicode工程下就显示大小不一致,有办法解决吗?




void CSPLToolView::OnBnClickedButton2()
{
this->Display(_T("TEST PASS"), 0);
this->Display(_T("TEST FAIL"), 1);
this->Display(_T("测试 PASS"), 0);
this->Display(_T("测试 FAIL"), 1);
}

LRESULT CSPLToolView::OnGetMessage(WPARAM wParam, LPARAM lParam)
{
int i;
CHARFORMAT cf;
i = (int)lParam;

wchar_t *lpsz = (wchar_t*)wParam;
memset(&cf, 0, sizeof(CHARFORMAT));
m_ctr_Trace.GetDefaultCharFormat(cf);
cf.dwEffects ^= CFE_AUTOCOLOR; // 为了让设置颜色有效
cf.yHeight = 15 * 15;//文字高度

// 新的颜色
if (i == 1)
{
cf.crTextColor = RGB(255, 0, 0);
}
else
{
cf.crTextColor = RGB(0, 0, 255);
}
m_ctr_Trace.SetWordCharFormat(cf); //为将要输入的内容设定字//csText
this->ShowInfo(lpsz);
return 0;
}


void CSPLToolView::ShowInfo(wchar_t *msg)
{
wchar_t szt[256];
wchar_t *lpsz = msg;
swprintf_s(szt, _T(">>>> %s\x0D\x0A"), lpsz);


//显示方法1
SETTEXTEX SetTxtEx = { 0, };
SetTxtEx.flags = ST_SELECTION;
SetTxtEx.codepage = 1200;
BOOL bRet = ::SendMessage(m_ctr_Trace.GetSafeHwnd(), EM_SETTEXTEX, (WPARAM)&SetTxtEx, (LPARAM)szt);
ASSERT(bRet);

//显示方法2
//m_ctr_Trace.ReplaceSel(szt); 用这种方式显示也一样
}


void CSPLToolView::Display(wchar_t *msg, int index)
{
SendMessage(WM_CAL_MSG, (WPARAM)msg, index);
}

void CSPLToolView::Display(CString sMsg, int index/*=3*/)
{
SendMessage(WM_CAL_MSG, (WPARAM)sMsg.GetBuffer(sMsg.GetLength()), index);
}


...全文
247 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhhh63 2017-12-10
  • 打赏
  • 举报
回复
把字体设成宋体试试
schlafenhamster 2017-12-10
  • 打赏
  • 举报
回复
cf.yHeight = 15 * 15;//文字高度 字体 取 标准 字体 xxPoint 试试,不要 随意 指定大小 ( 系统 会取 最 接近 的)
shedawei 2017-12-06
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
PARAFORMAT2 PFM_LINESPACING 调整下间距试试看


PARAFORMAT2 pf2;
memset(&pf2, 0, sizeof(PARAFORMAT2));
pf2.cbSize = sizeof(PARAFORMAT2);
pf2.dwMask = PFM_LINESPACING;
pf2.bLineSpacingRule = 2; //2倍行距,取值0-5,具体含义看帮助
::SendMessage(m_ctr_Trace.GetSafeHwnd(), EM_SETPARAFORMAT, 0, (LPARAM)&pf2);


调整行距也没效果
shedawei 2017-12-06
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
PARAFORMAT2 PFM_LINESPACING 调整下间距试试看
你说的这个是在哪里调试的?
凌乱哥 2017-12-06
  • 打赏
  • 举报
回复
试了下,确实有问题,应该是和中文有关,实在不行可以考虑换控件,用ListBox或者直接绘制文字
zgl7903 2017-12-06
  • 打赏
  • 举报
回复
PARAFORMAT2 PFM_LINESPACING 调整下间距试试看
shedawei 2017-12-06
  • 打赏
  • 举报
回复
重新贴一下代码

void CSPLToolView::OnBnClickedButton2()
{
	this->Display(_T("TEST PASS"), 0);
	this->Display(_T("TEST FAIL"), 1);
	this->Display(_T("测试 PASS"), 0);
	this->Display(_T("测试 FAIL"), 1);
}

LRESULT CSPLToolView::OnGetMessage(WPARAM wParam, LPARAM lParam)
{
	int i;
	CHARFORMAT cf;
	i = (int)lParam;

	wchar_t *lpsz = (wchar_t*)wParam;
	memset(&cf, 0, sizeof(CHARFORMAT));
	m_ctr_Trace.GetDefaultCharFormat(cf);
	cf.dwEffects ^= CFE_AUTOCOLOR;          // 为了让设置颜色有效
	cf.yHeight = 15 * 15;//文字高度

	// 新的颜色
	if (i == 1)
	{
		cf.crTextColor = RGB(255, 0, 0);
	}
	else
	{
		cf.crTextColor = RGB(0, 0, 255);
	}
	m_ctr_Trace.SetWordCharFormat(cf);		//为将要输入的内容设定字//csText	 
	this->ShowInfo(lpsz);
	return 0;
}


void CSPLToolView::ShowInfo(wchar_t *msg)
{
	wchar_t szt[256];
	wchar_t *lpsz = msg;
	swprintf_s(szt, _T(">>>> %s\x0D\x0A"), lpsz);


        //显示方法1
	SETTEXTEX SetTxtEx = { 0, };
	SetTxtEx.flags = ST_SELECTION;
	SetTxtEx.codepage = 1200;
	BOOL bRet = ::SendMessage(m_ctr_Trace.GetSafeHwnd(), EM_SETTEXTEX, (WPARAM)&SetTxtEx, (LPARAM)szt);
	ASSERT(bRet);

        //显示方法2
	//m_ctr_Trace.ReplaceSel(szt);  用这种方式显示也一样
}


void CSPLToolView::Display(wchar_t *msg, int index)
{
	SendMessage(WM_CAL_MSG, (WPARAM)msg, index);
}

void CSPLToolView::Display(CString sMsg, int index/*=3*/)
{
	SendMessage(WM_CAL_MSG, (WPARAM)sMsg.GetBuffer(sMsg.GetLength()), index);
}

shedawei 2017-12-06
  • 打赏
  • 举报
回复
大神们,救场救场啊

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧