在OnPaint上面使用outText输出文字使用双缓冲技术,将DC的东西拷贝到memDC在显示到画布上
void CTimerTestDlg::OnPaint()
{
if (IsIconic())
{
//这里是多余的(自动生成的代码)
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//这一段才是主要的代码
CPaintDC pDoc(this);
CRect clRect;
::GetClientRect(m_hWnd, &clRect);
CDC memDC;
memDC.CreateCompatibleDC(&pDoc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&pDoc, clRect.Width(), clRect.Height());
CBitmap * pOldBitmap = memDC.SelectObject(&bitmap);
memDC.FillSolidRect(&clRect, RGB(210, 210, 210));
CFont my_font;
my_font.CreatePointFont(clRect.Width()*1.8, _T("宋体"));//代表15号字体,华文行楷
CFont *fontOld = memDC.SelectObject(&my_font);
int x = 20, y = 20;
//背景颜色
//RECT rect = { x - 20, y - 20 };
//rect.right = rect.left;
//rect.bottom = 200;
//memDC.FillSolidRect(&rect, RGB(255, 255, 255));
printf("clRect w= %d,clRect h= %d\n", clRect.Width(), clRect.Height());
memDC.SetTextColor(RGB(255, 0, 0));
memDC.TextOut(x, y, szSzt, szSzt.GetLength());
memDC.SelectObject(fontOld);
pDoc.BitBlt(0, 0, clRect.Width(), clRect.Height(), &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBitmap);
CDialogEx::OnPaint();
}
}