+ -
当前位置:首页 → 问答吧 → static控件改变字体后内容前后颠倒了

static控件改变字体后内容前后颠倒了

时间:2011-12-23

来源:互联网

自己派生了CStatic类,最终写出来的内容,后面的一些字符跑到前面去了,比如原来的内容是“+35s”,结果显示成了“s+35”,目前发现的,就是最后一个字符会跑到前面去,如果在下面的设置字体后增加一行:
strText += TEXT("a");
则写出来的内容就是正常的,而如果添加一个空格
strText += TEXT(" ");
则一样没有任何效果,和添加之前是一样的,如果是下面这样子:
strText = TEXT("ab") + strText;
则最后一个字符还是会跑到前面,即 “sab+35”。
通过跟踪,可以确认这个位置的字符串是正常的,只是在显示时就反了,不知道各位有没有砬到过
另外,可以确认,这个框框足够大来容纳所有的字符
写内容的代码如下:

C/C++ code

void CSuperStatic::OnPaint() 
{
    CPaintDC dc(this); // device context for painting
    DrawStatic( &dc );
}
void CMyStatic::DrawStatic( CDC *pDC )
{
    CString strText;
    
    GetWindowText( strText );
    if ( strText.GetLength() == 0 )
        return;

    CRect rect;
    GetClientRect( &rect );
    DWORD dwStyle = GetStyle();
    dwStyle |= DT_SINGLELINE | DT_VCENTER;

    CFont *pOldFont = NULL;

    // 目的是使字段和控件的高度相匹配,占用高度的7/8
    CFont *pFont = GetFont();
    LOGFONT stuLogFont;
    pFont->GetLogFont( &stuLogFont );
    double f = rect.Height() * 7 / 8 * 1.0 / stuLogFont.lfHeight;
    stuLogFont.lfHeight = long(stuLogFont.lfHeight * f);
    CFont fnt;
    fnt.CreateFontIndirect( &stuLogFont );
    pOldFont = pDC->SelectObject( &fnt );    // 只要这里设置了,内容就会前后颠倒,否则就是正常的

    pDC->SetBkMode( TRANSPARENT );
    if ( (dwStyle & DT_CENTER) != DT_CENTER )
        rect.left += 3;
    pDC->DrawText( strText, &rect, dwStyle );

    if ( pOldFont )
        pDC->SelectObject( pOldFont );
}

作者: jszj   发布时间: 2011-12-23

肯定是你逻辑的问题。。。 。。。而且只是字符串处理的问题。

作者: healer_kx   发布时间: 2011-12-23

好长呀

作者: zhongguoren666   发布时间: 2011-12-23