多行编辑框自动换行

时间:2021-01-30 06:22:20
最近一个项目用到多行编辑框显示base64编码,我的base64编码里把斜杠换成了减号,问题就来了,遇到加号或减号不到边框就自动换行了,每行都不齐啊,很难看!

AAAAAAAAAAAAAAAAAA-
AAAAAAAAAAAAAAAAAAAAAAAA-
类似这样子

7 个解决方案

#1


用RICHEDIT来显示,这个遇到\n就换行了

#2


CRect EditRect(0,0,0,0),FontRect(0,0,0,0);
 int EditWidth=0;
 int FontWidth=0;
 m_EventEdit.GetRect(&EditRect);
 EditWidth=EditRect.Width();

 CClientDC dc(this);
 NONCLIENTMETRICS ncm; 
 ncm.cbSize = sizeof(NONCLIENTMETRICS); 
 SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0); 

 CFont font; 
 font.CreateFontIndirect(&ncm.lfMessageFont); 
 // 将字体选进DC 
 CFont* pOldFont = dc.SelectObject(&font); 
 // 计算文本大小 
 UpdateData(TRUE);
 dc.DrawText(m_EventString, FontRect, DT_CALCRECT); 
 // 回复旧字体-这是必须的 
 dc.SelectObject(pOldFont); 

 FontWidth=FontRect.Width();

//如果字符串宽度大于编辑框宽度,则换行
 if(FontWidth>=EditWidth)
 {
  m_EventString+="\r\n";
        //   Add   soft   line-break   breaks.   
        m_EventEdit.FmtLines(TRUE);   
        //   Dump   the   text   of   the   edit   control.   
        afxDump   <<   m_EventString; 
        //   Remove   soft   line-break   breaks.   
        m_EventEdit.FmtLines(FALSE);  
 }

#3


多行编辑框自动换行

\r\n


????可以嘛?

#4


Base64编码里哪有换行啊。。。我就是为了让他不要自动换行的,遇到减号自动换行了,不到头的

#5


把斜杠换成了减号

ba把斜杠转义 \\

#6


/////////////////////////////////////////////////////////////////////////////
// CBase64Dlg dialog 26(A)+26(a)+10(0)+2(+*) 
// input 3 bytes output 4 bytes. if len%3 !=0 , fill the rest with '='. 
const TCHAR rgtchBase64[] =
TEXT("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+*"); 

哪里有 ‘-’ 号,你是 UTF7 吧 ?

#7


算了,迂回解决,采用base62把两个非字母数字的字符替换掉了。

#1


用RICHEDIT来显示,这个遇到\n就换行了

#2


CRect EditRect(0,0,0,0),FontRect(0,0,0,0);
 int EditWidth=0;
 int FontWidth=0;
 m_EventEdit.GetRect(&EditRect);
 EditWidth=EditRect.Width();

 CClientDC dc(this);
 NONCLIENTMETRICS ncm; 
 ncm.cbSize = sizeof(NONCLIENTMETRICS); 
 SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0); 

 CFont font; 
 font.CreateFontIndirect(&ncm.lfMessageFont); 
 // 将字体选进DC 
 CFont* pOldFont = dc.SelectObject(&font); 
 // 计算文本大小 
 UpdateData(TRUE);
 dc.DrawText(m_EventString, FontRect, DT_CALCRECT); 
 // 回复旧字体-这是必须的 
 dc.SelectObject(pOldFont); 

 FontWidth=FontRect.Width();

//如果字符串宽度大于编辑框宽度,则换行
 if(FontWidth>=EditWidth)
 {
  m_EventString+="\r\n";
        //   Add   soft   line-break   breaks.   
        m_EventEdit.FmtLines(TRUE);   
        //   Dump   the   text   of   the   edit   control.   
        afxDump   <<   m_EventString; 
        //   Remove   soft   line-break   breaks.   
        m_EventEdit.FmtLines(FALSE);  
 }

#3


多行编辑框自动换行

\r\n


????可以嘛?

#4


Base64编码里哪有换行啊。。。我就是为了让他不要自动换行的,遇到减号自动换行了,不到头的

#5


把斜杠换成了减号

ba把斜杠转义 \\

#6


/////////////////////////////////////////////////////////////////////////////
// CBase64Dlg dialog 26(A)+26(a)+10(0)+2(+*) 
// input 3 bytes output 4 bytes. if len%3 !=0 , fill the rest with '='. 
const TCHAR rgtchBase64[] =
TEXT("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+*"); 

哪里有 ‘-’ 号,你是 UTF7 吧 ?

#7


算了,迂回解决,采用base62把两个非字母数字的字符替换掉了。