MFC CEditView加载背景图片的问题

ProgJ 2016-02-23 11:49:23
图片是png格式的,相关代码如下:
void EditView::OnInitialUpdate()
{
CEditView::OnInitialUpdate();
m_editFont.CreatePointFont(168, "宋体"); //设置字体
SetFont(&m_editFont);

// view margin 设置编辑区域
CRect rc;
GetClientRect(&rc);
rc.OffsetRect(7, 3);// 左边留7 ,上边留3

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

m_pCtrlREdit->SetRect(rc);
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)
{
pDC->SetBkMode(TRANSPARENT);
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); // 帖图到CEditView中作为背景
}
return FALSE; // 通知窗口不用重绘背景了,我们已经填充过了。
//return CEditView::OnEraseBkgnd(pDC);
}




这是初始化后的实际效果。也是我希望一直保持的效果


这是当我再输入一个字符时的效果,可以看到背景被挡住了一部分

有没有什么解决的方法,能一直保持背景的
菜鸟能力还不够,因此各位最好能给代码,感谢了
...全文
86 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ProgJ 2016-02-26
  • 打赏
  • 举报
回复
没人吗。。。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧