在使用GDI+的过程中,为了使字体显示在透明的窗口中使用了SetLayeredWindowAttributes(将窗口的背景设为白色,然后针对白色进行透明),文字显示在黑色的背景上会在边界部分出现白色的锯齿,在下用全部的饿分数请教各位高手该怎么解决?

解决方案 »

  1.   

    http://blog.csdn.net/baickl/archive/2005/12/29/565370.aspx
    看下这里对字体的无锯齿处理
      

  2.   

    谢谢,可能是我没讲明白,字体边缘的锯齿主要来源于作为背景的白色,在窗口透明过程中字体边缘的某些白色部分有些被保留下来,没有透明,所以出现锯齿的效果。关于去锯齿的两个函数SetTextRenderingHint(TextRenderingHintAntiAlias);
    和SetSmoothingMode(SmoothingModeHighQuality);我都有试过,单白色的部分还是有保留。
    但还是要谢谢你
      

  3.   

    正好相反,你应该去除反锯齿:
    SetSmoothingMode(SmoothingModeNone);
      

  4.   

    我试了SetTextRenderingHint(),不过效果不是很明显
      

  5.   

    BLENDFUNCTION m_Blend; m_Blend.BlendOp=0; 
    m_Blend.BlendFlags=0; 
    m_Blend.AlphaFormat=1; 
    m_Blend.SourceConstantAlpha=255; if((dwExStyle&0x80000) != 0x80000) 

    SetWindowLong(hWnd,GWL_EXSTYLE,dwExStyle^0x80000); 

    UpdateLayeredWindow(hWnd,//屏幕上的窗口句柄 
    hdcClient,//屏幕上的窗口DC 
    &ptWinPos, 
    &SizeWindow, 
    m_hdcKaraoke,//内存中包含需要显示信息的DC 
    &ptSrc, 
    g_crTransparentColor,//需要被透明的颜色 
    &m_Blend, 
    ULW_ALPHA);