ProgJ 2016-02-21 08:43 采纳率: 33.3%
浏览 1840
已采纳

求助!MFC 单文档多视图 CEditView加载的背景图片被挡住的问题

貌似是加载的背景图片被输入的那一行的背景覆盖了。。
图片说明

图片说明

如图,其中圈起来的就是CEditView,视图底部还能看见背景图片的一部分,但光标所在的那一行就没有图片的显示了,而且我如果按了回车换行,下面一行也会被覆盖。。以下代码。

 视图类中相关变量:

    CEdit* m_pCtrlREdit;// 内嵌的CEditCtrl控件指针
    CImage m_ImageLogo; // 图片
    UINT widthPic, heightPic;   // 图片的长宽
    COLORREF cl;    // 指定图片的透明色

  void EditView::OnInitialUpdate()
{
    //CEditView::OnInitialUpdate();
    m_editFont.CreatePointFont(168, "宋体");    //设置字体
    SetFont(&m_editFont);

    m_pCtrlREdit = &GetEditCtrl();
    ASSERT_VALID(m_pCtrlREdit);

    LONG lStyle = GetWindowLong(m_pCtrlREdit->m_hWnd, GWL_EXSTYLE); // 保存CEditCtrl的窗口风格
    lStyle |= WS_EX_TRANSPARENT;    // CEditCtrl的窗口风格加入透明背景
    SetWindowLong(m_pCtrlREdit->m_hWnd, GWL_EXSTYLE, lStyle);   // 重设CEditCtrl的新窗口风格

    m_ImageLogo.Load((CString)"H:\\2016寒假作业\\Test\\Test\\res\\titleBk.png");
    if (m_ImageLogo.IsNull())
    {
        CString szTemp;
        szTemp.Format(_T("错误!找不到%s!"), (CString)"H:\\2016寒假作业\\Test\\Test\\res\\titleBk.png");
        MessageBox(szTemp);
    }
    else
    {
        widthPic = m_ImageLogo.GetWidth();  // 获取图片宽度
        heightPic = m_ImageLogo.GetHeight();    // 获取图片高度
        cl = RGB(255, 255, 255);            // 指定透明色
    }

    CString str = "H:\\2016寒假作业\\Test\\txt\\默认标题.txt";
    ReadTitle(str);
}

BOOL EditView::OnEraseBkgnd(CDC* pDC)
{
    CRect rect;
    GetClientRect(&rect);
    pDC->FillSolidRect(&rect, pDC->GetBkColor());   // 用原背景色刷一下背景,否则会把程序后面的统统看见,一团乱麻。此处可以pDC->GetBkColor()将替换自定义的颜色,如白色RGB(255,255,255)
    if (m_ImageLogo)
    {
        m_ImageLogo.TransparentBlt(pDC->m_hDC, 0 , 0, rect.Width(), rect.Height(), 0, 0, widthPic, heightPic, cl);  // 帖图到CRichEditView中作为背景
    }
    return FALSE;   // 通知窗口不用重绘背景了,我们已经填充过了。
    //return CEditView::OnEraseBkgnd(pDC);
}

还处在MFC的入门阶段,希望各位达人耐心讲解一下,感谢!

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-02-21 09:37
    关注

    OnEraseBkgnd里加上
    pDC->SetBkMode(TRANSPARENT);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗
  • ¥15 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1