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

    效果后

  • 相关阅读:
    pytorch实现rnn并且对mnist进行分类
    python中的list按照某一列进行排序的方法
    pytorch实现style transfer
    Pytorch基本变量类型FloatTensor与Variable
    Linux上统计文件夹下文件个数以及目录个数
    python调用caffe实现预测
    python调用caffe环境配置
    JS实现唤起手机APP应用,如果本地没有则跳转到下载地址
    PHP开发中使用的工具
    Linux安装redis服务
  • 原文地址:https://www.cnblogs.com/yuzhould/p/4454970.html
Copyright © 2011-2022 走看看