15,979
社区成员
发帖
与我相关
我的任务
分享
BOOL CWin8WindowDemoDlg::OnEraseBkgnd(CDC* pDC)
{
CRect rcWnd;
this->GetClientRect(&rcWnd);
/*
如果我们将整个标题栏和边框都当为一个纯色来看待的话
其实整个界面就相当于是这样:
一个全纯色的界面,在上面放置了一快白色的区域
*/
//1 - 把整个界面都绘制为底色
//pDC->FillRect(rcWnd, &CBrush(0x8FC5ED)); //桔色
pDC->FillRect(rcWnd, &CBrush(RGB(96,174,210))); //蓝色
//2 - 将除掉标题栏,边框部分的余下的范围,全部用白色填充
CRect rc;
rc.left = BORDER_WIDTH;
rc.top = m_rcCaption.Height();
rc.right = rcWnd.Width() - BORDER_WIDTH;
rc.bottom = rcWnd.Height() - BORDER_WIDTH;
pDC->FillRect(rc, &CBrush(0xF0F0F0)); //白色
//绘制图标
::DrawIconEx(pDC->m_hDC, BORDER_WIDTH, BORDER_WIDTH
, m_hIcon, 16, 16, NULL, NULL, DI_NORMAL);
//绘制标题内容
LOGFONT lf;
::ZeroMemory(&lf, sizeof(lf));
_stprintf(lf.lfFaceName, _T("微软雅黑"));
CFont font;
font.CreatePointFontIndirect(&lf);
CFont* pFontOld = (CFont*)pDC->SelectObject(&font); //这里将选入前的字体指针存下来
pDC->SetBkMode(TRANSPARENT); //一定要记得设置这个,否则会有白色的底色
CString sCaption;
this->GetWindowText(sCaption);
pDC->DrawText(sCaption, m_rcCaption, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
//这里我们在窗口中间再绘制一段话,看看效果呢
pDC->DrawText(_T("MFC+GDI打造仿WIN8自绘窗口")
, -1
, rcWnd
, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
pDC->SelectObject(pFontOld); //将之前的字体给选回去
font.DeleteObject();
return TRUE;
}