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);
    }

    效果后

  • 相关阅读:
    viewer.js 显示图片名称和照片属性
    js中判断数组中是否包含某元素的方法(转载)
    js脚本如何更新, js后加?v=版本号的原因(转载)
    iview Carousel 走马灯或轮播图 点击事件失效
    sqlserver 查询表中所有字段的最大长度(转载)
    Ueditor文字和echarts图片 生成 word 前端解决方案
    Spark Streaming Backpressure分析
    Spark任务调度流程及调度策略分析
    Spark资源调度及任务调度
    spark streaming流式计算---监听器
  • 原文地址:https://www.cnblogs.com/yuzhould/p/4454970.html
Copyright © 2011-2022 走看看