貌似是加载的背景图片被输入的那一行的背景覆盖了。。
如图,其中圈起来的就是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的入门阶段,希望各位达人耐心讲解一下,感谢!