首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

有何办法让Edit控件每一起都不同颜色

2013-09-05 
有何办法让Edit控件每一行都不同颜色?本帖最后由 VisualEleven 于 2013-08-21 10:27:22 编辑CString lineo

有何办法让Edit控件每一行都不同颜色?
本帖最后由 VisualEleven 于 2013-08-21 10:27:22 编辑

CString lineone = "This is Lineone";
CString linetwo = "This is Linetwo";
CString linethree = "This is Linethree";


GetDlgItem(IDC_EDIT1)->SetWindowText();


请问,如何让它们同时显示在IDC_EDIT1
让第一行字体是红色,
第二行是蓝色
第三行是紫色?
[解决办法]
最快的方法是用CRichEditCtrl控件
[解决办法]
本帖最后由 VisualEleven 于 2013-08-21 10:27:10 编辑
DWORD AppendText(BYTE *pdata,UINT len,COLORREF FgColor)
{
CharNewColor(FgColor);
//  make a sz
BYTE *pnew=KillHalfHZ(pdata,len);
//
LONG nStartChar;
LONG nEndChar;
m_ctrlMyRichEdit.GetSel(nStartChar,nEndChar);
m_ctrlMyRichEdit.SetSel(nEndChar,nEndChar);// go end
m_ctrlMyRichEdit.ReplaceSel((LPCTSTR)pnew);
//delete [] pnew;
//
int all=m_ctrlMyRichEdit.GetLineCount();
if(all > 50) m_ctrlMyRichEdit.LineScroll(all-50,0);
//
return len;
}

[解决办法]
本帖最后由 VisualEleven 于 2013-08-21 10:06:46 编辑 这么调用AppendText((BYTE*) lineone.GetBuffer(0),20,RGB(255, 0,0));//红色
AppendText((BYTE*)  linetwo .GetBuffer(0),20,RGB(0, 0,255));//蓝色
AppendText((BYTE*) lineone.GetBuffer(0),20,RGB(255, 0,0));//紫色自己找RGB
KillHalfHZ这个函数没给你
BYTE *KillHalfHZ(BYTE *pdata,UINT len) 
{     
static BYTE HalfHZ=0; 
BYTE firstHalf=0;    
UINT HalfAt=0;    
UINT total=0;
BYTE *copy=0;   
BYTE *pTmp=0; //   
if(HalfHZ !=0)    
{// add last half HZ to new line     
copy=new BYTE[len+1+SZ];     
memset(copy,0,len+1+SZ);       


copy[0]=HalfHZ;   
HalfHZ=0;     
memcpy(&copy[1],pdata,len);      
total=len+1;   
}     else   
{// keep original    
copy=new BYTE[len+SZ];     
memset(copy,0,len+SZ);       
memcpy(copy,pdata,len);       
total=len;        
}     pTmp=copy; // check this new line   
for(UINT i=0;i<total;i++)   
{         
if(*pTmp >= 0x80)      
{             
if(firstHalf==0)      
{               
firstHalf = *pTmp;      
HalfAt = i+1;         
}           
else         
{// has half HZ     
if(i == HalfAt)          
{// 1 hz                  
firstHalf=0;         
HalfAt=0;           
}           
else         
{// *pTmp='?'       
}           
}     
}        
pTmp++;  
}     if(HalfAt == 0)   
{ // new line no half HZ     
copy[total]=0;   
}    
else if (HalfAt==total)  
{// new line has half HZ at end       
HalfHZ= firstHalf;        
copy[total-1]=0;// sz     
} // delete it after use
return copy; }


------解决方案--------------------


可以使用CRichEditCtrl控件,要不就自绘CEdit实现

热点排行