如图,使用DrawText竖着写字,默认的效果是左侧的第一种:123abc两个符号一行但是我看到很多程序实际上竖着显示的字体是第二种效果,请问如何实现如何实现红色的纵向文本输出?

解决方案 »

  1.   

    LOGFONT lf;
    //这里设置你想要的lf,LOGFONT结构里有调整输出角度的
    CFont font;
    font.CreatePointFontIndirect(&lf);
    dc.SelectObject(&font)
      

  2.   

    1)使用ExtTextOut不单可以竖排文本,还可以斜排甚至任意角度排版,不需要设置字体属性。
    2)使用世界坐标转换可以实现任意角度输出。
    注:你的红字可以用GDI+的DrawString输出。
      

  3.   

    http://topic.csdn.net/u/20090210/10/a373b350-f1fa-4bef-8928-0f502670c026.html
      

  4.   

    我发现星星越多的人越浮躁,为了分拼命回帖,干脆就不仔细看问题反而是分数不高的baby393,才给出了一个可行答案:GDI+
    我是知道GDP+可以实现红色的字,就是想来问问是否有人能通过GDI实现fishion、wltg2001、VisualEleven 三人根本就没有看我的图,就拿一个百度上的通用答案来搪塞
    回帖不用大脑,这样子你们除了有可能骗到几分,对自身的技术有提升么?
    星星那么多,对得起你们的真是水平么?一群骗分的星星,你们根本就不能实现红色的效果!而且永远也不会学到如何实现!!
      

  5.   

    知之为知之,不知为不知VisualEleven你的链接,顶多能实现第一种竖的字根本无法实现红色的效果你这种行为,就跟那些在baidu知道上胡乱回帖骗等级的,没有区别
      

  6.   

    VisualEleven你来回帖捧场,我非常感谢我既然拿出了这张图,说明我都已经实现了,只是对我实现的方法不满意但是估计你自己的不懂吧,捧场还不如直接来一个“顶”字,节约论坛资源
      

  7.   

    LS的党员们,关键时刻还得主席救你们。
    CRect   rc;   
    GetClientRect(rc);   
    CPaintDC   dc(this);
    CString   str(_T( "............旋转123abc文本! "));   
    dc.SetBkMode(TRANSPARENT);   
    dc.SetTextColor(RGB(0,0,255));   
    CFont   font;   
    LOGFONT   lf;   
    memset(&lf,0,sizeof(LOGFONT));   
    lf.lfHeight   =   -14;   
    lf.lfWeight   =   FW_NORMAL;   
    lf.lfClipPrecision   =   CLIP_LH_ANGLES;   
    strcpy(lf.lfFaceName,   "@宋体");   //看好这个字体!! lf.lfEscapement   =   2700;   
    font.CreateFontIndirect(&lf);   
    CFont   *pOldFont   =   dc.SelectObject(&font);   
    dc.TextOut(rc.right/2,   rc.bottom/2,str);   
    dc.SelectObject(pOldFont);   
    font.DeleteObject();   
    此外,楼主不得出言侮辱我们兔子党。
    我为兔子党员的浮躁深表抱歉
      

  8.   

    LOGFONT lf;
    //这里设置你想要的lf,LOGFONT结构里有调整输出角度的
    CFont font;
    font.CreatePointFontIndirect(&lf);
    dc.SelectObject(&font)
      

  9.   

    LOGFONT lf;
    //这里设置你想要的lf,LOGFONT结构里有调整输出角度的
    CFont font;
    font.CreatePointFontIndirect(&lf);
    dc.SelectObject(&font)
      

  10.   

    其实答案我已经都给出了,就是我给出的连接,lz根本就没有看那个链接的帖子,你看那个帖子的5#,别人说的吗?lz真的看过了吗?
      

  11.   

    原来部长贴的url里面已经有答案了……
      

  12.   

    This is a platform for technology exchange, but not for curse. Somebody should be responsible for his embarrassment and boast. Everyone replying to your question did help you, while you blamed them over and again for their carelessness in contrast. I pay no attension to your meaningless controversy but I do defy those who waste the time of their own and others'. Furthermore I suggest you show more respect to the repliers: all in all they did help you with great enthusiasm.
      

  13.   

    Lz 就是一B 人,人家帮你,还废话一大堆
    实在
      

  14.   

    这里是一个技术板块,请从技术角度讨论,英汉大家都看得懂,所以请不要人身攻击既然是帮忙,最好诚心诚意,无谓的攻击只会浪费了时间,浪费资源技术分可以激励大家互相帮助,但请不要为了分数蒙蔽了技术我在有时间的时候也会帮别人解决问题,但是我会的我说,我不会的我一般不会乱说,灌水我去这里的水区我向VisualEleven道歉,我的确没有看到5楼,不过您坚持到了23楼才说出问题的关键点,高人果然都打机锋、高深莫测,再次道歉感谢主席给出了答案,关键时刻还得主席救拯救了兔子党,否则……
      

  15.   

    17楼的好像还是不能实现,我的代码如下:
    void CSt::DrawStation( CDC *pDC )
    {
    m_pDC = pDC;
    if ( IsWindow(m_stationPointWnd.m_hWnd) )
    {
                    // 按照17楼说的方法进行字体旋转
    CFont *pFont = m_stationPointWnd.GetFont();
    LOGFONT stuLogFont;
    pFont->GetLogFont( &stuLogFont );
    stuLogFont.lfEscapement = 2700;
    stuLogFont.lfClipPrecision = CLIP_LH_ANGLES;
    m_pDC->SelectObject( pFont );         m_pDC->DrawText( m_strStationName[0], &m_rcStationName, DT_WORDBREAK | DT_CENTER );
            }
    }结果还是无法旋转啊
      

  16.   

    刚试了,原来是我中间没有重新createfont,所以没有旋转。
    我弄好了,它确实旋转了,但它是整个字全部旋转了,而不是只有中间的英文和数字进行了旋转另外,刚刚注意到17楼的方法中,字体名称前带了“@”,我没有试,有可能确实可以达到楼主想要的效果,但如果是全英文的要用一些英文的常用字体,是不是也可以前面带“@”?
      

  17.   

    刚试了,原来是我中间没有重新createfont,所以没有旋转。
    我弄好了,它确实旋转了,但它是整个字全部旋转了,而不是只有中间的英文和数字进行了旋转另外,刚刚注意到17楼的方法中,字体名称前带了“@”,我没有试,有可能确实可以达到楼主想要的效果,但如果是全英文的要用一些英文的常用字体,是不是也可以前面带“@”?