zoukankan      html  css  js  c++  java
  • 背景透明后字体,贴图产生遮盖覆盖问题的解决方法。

    关于背景透明,透明贴图后,Invalidate(FALSE)刷新后贴图被上次的痕迹遮盖。



    Invalidate(TRUE)可以去除遮盖的痕迹,但这样的的闪烁谁也无法接受

    这个问题产生的原因可能是SetBkMode(TRANSPARENT)透明的区域,当Invalidate(FALSE)后不会再进行刷新,
    导致以前痕迹还在,造成了遮盖的效果。
    解决:
    方法1,得到这篇区域InvalidateRect()来刷新,只有这片小的区域会闪烁。  这个方法后还是让人不满意。
    方法2,偷梁换柱,截取这个文字应有的背景,直接进行不透明贴图。 这个方法实现的效果很满意。
    方法2示例代码:
    void CXXXStatic::OnPaint()
    {
                      CPaintDC   dc(this);
                      CString  strText;
                       this->GetWindowText(strText);
     CBitmap  memBmp;
     CDC      memDC;
     memDC.CreateCompatibleDC(pDC);

     CBitmap *pOldBmp = memBmp.LoadBitmap(IDB_XXX_XXX);    //load你的背景
     pOldBmp = memDC.SelectObject(&memBmp);
                      memDC.TextOut(0, 0, strText, wcslen(strText));
                      dc.BitBlt(posX, posY, bmpW, bmpH, &memDC, 0, 0, SRCCOPY);
                      memDC.SelectObject(pOldBmp);
                      memDC.DeleteObject();
    }

    方法3,同方法二,只不过背景还设置为透明,利用CImage进行贴图。
    方法3示例代码
    void CXXXStatic::OnPaint()
    {
                       CPaintDC   dc(this);
     CString  strText;
                       this->GetWindowText(strText);
     dc.SetBkMode(TRANSPARENT);
     CImage  img;
     if(m_imgPath != _T(""))    //(m_imgPath 是一个成员变量,通过对它进行set,可以设置此控件的图片背景。
     {
      img.Load(m_imgPath);
      img.Draw(dc.m_hDC, 0, 0);
     }
     dc.TextOut(0, 0, strText, wcslen(strText));
    }

    void CXXXStatic::SetTextBkImg(LPCTSTR filePath)
    {
     m_imgPath = CString(filePath);
    }

    效果后

  • 相关阅读:
    颜色转换
    颜色转换、随机、16进制转换、HSV
    ColorTransform调整显示对象的颜色值
    unity+统计代码总行数
    Unity加载json数据
    打不开unity编辑器界面,每次默认打开上一次项目,并且报错Error loading file:///C%3A%2FUsers%2FT01017%2FAppData%2FRoaming%2FUnity%2FPackages%2Fnode_modules%2F
    Unity 同一Text文本修改不同的字体大小和字体颜色,加空格
    Unity 限时使用 限制试用时间和使用次数
    unity更改文字透明度
    unity+动画状态机
  • 原文地址:https://www.cnblogs.com/yuzhould/p/4454970.html
Copyright © 2011-2022 走看看