我想一个richedit做一个结果显示的程式,如:
Test Video PASS
Test Signal PASS
目的是将最后的结果显示颜色PASS 为蓝色,Test Video,Test Signal为黑色.
但我用如下的代码在第一行的PASS显示为蓝色,后面的都是黑色.不知为什么?
代码如下:
void testDlg::Test()
{
AddText("Test Video PASS");
AddText("Test Signal PASS");}
void testDlg::AddText(char buf[])
{
CString str;
str = buf;
str +="\r\n";
m_richedit.SetSel(-1, -1);
m_richedit.ReplaceSel(str);
//strMsg+=buf;
//strMsg+="\r\n";
//m_richedit.SetWindowText(strMsg);
//m_richedit.LineScroll(m_richedit.GetLineCount(),0); CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.yHeight = 18*18;//文字高度
cf.crTextColor = RGB(0, 0, 255); //文字颜色
strcpy(cf.szFaceName ,_T("Arial"));//设置字体
int iCount = strlen(buf);
m_richedit.SetSel(iCount-6, iCount); //设置处理区域
m_richedit.SetSelectionCharFormat(cf);
//自动滚动至最后一行
m_richedit.SendMessage(WM_VSCROLL, SB_BOTTOM, 0);
}
Test Video PASS
Test Signal PASS
目的是将最后的结果显示颜色PASS 为蓝色,Test Video,Test Signal为黑色.
但我用如下的代码在第一行的PASS显示为蓝色,后面的都是黑色.不知为什么?
代码如下:
void testDlg::Test()
{
AddText("Test Video PASS");
AddText("Test Signal PASS");}
void testDlg::AddText(char buf[])
{
CString str;
str = buf;
str +="\r\n";
m_richedit.SetSel(-1, -1);
m_richedit.ReplaceSel(str);
//strMsg+=buf;
//strMsg+="\r\n";
//m_richedit.SetWindowText(strMsg);
//m_richedit.LineScroll(m_richedit.GetLineCount(),0); CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.yHeight = 18*18;//文字高度
cf.crTextColor = RGB(0, 0, 255); //文字颜色
strcpy(cf.szFaceName ,_T("Arial"));//设置字体
int iCount = strlen(buf);
m_richedit.SetSel(iCount-6, iCount); //设置处理区域
m_richedit.SetSelectionCharFormat(cf);
//自动滚动至最后一行
m_richedit.SendMessage(WM_VSCROLL, SB_BOTTOM, 0);
}
解决方案 »
- 如何能够得到主机名称?
- 各位高手一定要帮忙啊!关于坐标系的问题
- 当对话框缩小时怎么才能使控件不闪烁
- 大师留步:COM客户程序作为Windows服务程序时
- 请教个关于读写内存的问题,请各位帮忙!
- 问个打印相关的问题
- 【————】哪位高手有时间,能否公布qq,可以问些小问题
- 请问哪位大牛能提供一点Multi-Agent或者移动Agent方面的代码???谢谢!!!
- 我在一个窗体中作了两个控件,一个是List Control,一个是button,我想通过点击button时修改或删除List control中被选定的项,可是无论如何
- 带有socket的线程同步问题,如何搞定?
- 求助:位图存放在数据库中?
- MSFlexGrid控件问题
问题出在下面这句话:int iCount = strlen(buf)因为你AddText的时候,这个buf的长度是固定的,是"Test Signal PASS"的长度,而不是Richedit本身字符串的长度,所以你总是在设置第一行固定区域的那个pass的格式.
这就是为什么只有第一行是蓝色的原因了.void testDlg::AddText(char buf[])
{long nSelPosStart, nSelPosEnd;
m_richedit.GetSel(nSelPosStart, nSelPosEnd);
m_richedit.SetSel(nSelPosEnd-4, nSelPosEnd); //设置处理区域
m_richedit.SetSelectionCharFormat(cf);
m_richedit.SetSel(-1, -1);}
中已解决
多谢.
但如果我再进一步,"Test Signal"及"PASS"的字体大小也设做一下设定,变成一样大,然后再设一下PASS的颜色,我用如下的代码,为什么会不行呢?"Test Signal"的字体没有被设到."PASS"却被设到了.
cf.yHeight = 18*18;//文字高度
..
long nSelPosStart, nSelPosEnd;
m_richedit.GetSel(nSelPosStart, nSelPosEnd);
m_richedit.SetSel(nSelPosStart, nSelPosEnd);
m_richedit.SetSelectionCharFormat(cf); //先设置全部的字符大小为18*18. m_richedit.SetSel(nSelPosEnd-5, nSelPosEnd); //设置处理区域
cf.crTextColor = RGB(0, 0, 255); //文字颜色
m_richedit.SetSelectionCharFormat(cf);
m_richedit.SetSel(-1, -1);
{
CString str;
str = buf;
str +="\r\n";
int nLength = m_richedit.GetTextLength();
m_richedit.SetSel(-1, -1);
m_richedit.ReplaceSel(str); CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.yHeight = 18*18;//文字高度
m_richedit.SetSel(nLength, -1); //设置处理区域
m_richedit.SetSelectionCharFormat(cf);
m_richedit.SetSel(-1, -1);
cf.crTextColor = RGB(0, 0, 255); //文字颜色
strcpy(cf.szFaceName ,_T("Arial"));//设置字体
int iCount = strlen(buf); m_richedit.SetSel(iCount-6+nLength, iCount+nLength); //设置处理区域
m_richedit.SetSelectionCharFormat(cf); //自动滚动至最后一行
m_richedit.SendMessage(WM_VSCROLL, SB_BOTTOM, 0);}