CDC在OnPaint函数中采用TextOut函数初始化静态文本框

创建静态文本框之后如果想要在程序段中初始话文本框中的内容可以采用CDC类中的TextOut()函数,但是如果在OnPaint()中直接书写代码会导致待输出字符被静态文本框覆盖这是因为对话框上的文本控件是在对话框显示后才画上去的,所以用textout直接输出字体会被覆盖。link
如下所示:
CDC在OnPaint函数中采用TextOut函数初始化静态文本框_第1张图片

void CVCDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		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;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		
		CDialog::OnPaint();
		StyleInit();
	}

}
void CVCDlg::StyleInit()
{

	CWnd *pWnd=GetDlgItem(IDC_LABLE);
	CRect rect;
	CBrush brush(RGB(110,0,0));
	pWnd->GetClientRect (rect);
	CDC *pDC=pWnd->GetDC();
	//pDC->SetBkMode(TRANSPARENT);
	pDC->SelectObject(&m_myFont1);
	pDC->SetBkColor(RGB(225,225,0));
	pDC->TextOut (0,0,"你好会发挥发挥会发肥哈哈哈哈哈哈哈哈哈哈哈哈哈");
	pDC->MoveTo (0,0);
	pDC->LineTo(150,150);
}

以上代码运行后显示效果如下
CDC在OnPaint函数中采用TextOut函数初始化静态文本框_第2张图片
可以很明显看到我们想要输出的文本被我们的静态文本框遮盖住了。
解决方法如下:
在OnCtlColor函数中改变绘制该静态文本宽的画刷,采用透明画刷绘制静态文本框

HBRUSH CVCDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	if(pWnd->GetDlgCtrlID()==IDC_LABLE)
	{
		pDC->SetBkMode(TRANSPARENT);
		 CBrush   brush;
		brush.CreateStockObject(NULL_BRUSH); //这里采用了空画刷,即在绘图时不采用任何画刷
		return brush;
	}
	
	
	// TODO: Return a different brush if the default is not desired
	return hbr;
	
}

CDC在OnPaint函数中采用TextOut函数初始化静态文本框_第3张图片
可以看到再次显示的静态文本框不会对输出文字干预

你可能感兴趣的:(CDC在OnPaint函数中采用TextOut函数初始化静态文本框)