创建静态文本框之后如果想要在程序段中初始话文本框中的内容可以采用CDC类中的TextOut()函数,但是如果在OnPaint()中直接书写代码会导致待输出字符被静态文本框覆盖这是因为对话框上的文本控件是在对话框显示后才画上去的,所以用textout直接输出字体会被覆盖。link
如下所示:
void CVCDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint 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 icondc.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);
}
以上代码运行后显示效果如下
可以很明显看到我们想要输出的文本被我们的静态文本框遮盖住了。
解决方法如下:
在OnCtlColor函数中改变绘制该静态文本宽的画刷,采用透明画刷绘制静态文本框
HBRUSH CVCDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC hereif(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 desiredreturn hbr;}
可以看到再次显示的静态文本框不会对输出文字干预