在一个程序中,需要经常改写一个静态文本框中的内容,而这个文本框又是透明的。
根据网上资料试验,均存在改写后文字重叠现象,redrawwindow时又有屏幕闪烁,怎么办?
只刷新控件所在父窗口的局部区域:)
CMyTitleStatic::CMyTitleStatic()
{
m_TextColor=RGB(0,0,0);
pFont.CreateFont(18,0,0,0,FW_BOLD,0,0,0,DEFAULT_CHARSET,0,0,0,0,"宋体");
}
CMyTitleStatic::~CMyTitleStatic()
{
}
BEGIN_MESSAGE_MAP(CMyTitleStatic, CStatic)
//{{AFX_MSG_MAP(CMyTitleStatic)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/
// CMyTitleStatic message handlers
void CMyTitleStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
dc.SetBkMode(TRANSPARENT); //设置背景为透明的
CFont *pOldFont;
pOldFont=dc.SelectObject(&pFont);
dc.SetTextColor(m_TextColor);
dc.DrawText(m_strCaption,&rect,DT_LEFT);
dc.SelectObject(pOldFont);
// Do not call CStatic::OnPaint() for painting messages
}
void CMyTitleStatic::SetTextColor(COLORREF TextColor)
{
m_TextColor=TextColor;
}
void CMyTitleStatic::SetText(CString strCaption)
{
m_strCaption=strCaption;
RedrawWindow();
CRect rect;
GetWindowRect(&rect);
CRect crLocation(rect);
GetParent()->ScreenToClient(crLocation);
GetParent()->RedrawWindow(crLocation);
}