MFC 解决outText文字闪缩

在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();
	}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值