我写了一个CStatic派生类CTransparent,用来显示文字信息,同时能透明显示背景图片。
有个奇怪的现象,如果我将对话框上的一个static对象改成我的这个类,就可以正确显示文字(也能透明显示背景图片),但如果我定义一个CTransparent的对象m_Trans,然后m_Trans.Create()之后却不能透明显示背景图片,而是显示一个白色的背景,为什么?我的Create代码:
BOOL CTransparent::Create(CWnd* pParent, int WndID, CRect rect,CString ShowStr)
{
m_pParent = pParent;
m_WndID = WndID;
m_Rect = rect;
m_ShowStr = ShowStr;
return this->Create(NULL,_T("CTransparent"),WS_CHILD|WS_VISIBLE ,m_Rect,pParent, WndID);
}void CTransparent::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
GetClientRect(m_rcClient);
CFont* pOldFont = dc.SelectObject(&m_Font);
int oldBkMode = dc.SetBkMode(TRANSPARENT);
dc.Rectangle(CRect(0,0,50,50));
dc.SetTextColor(RGB(255,0,0));
dc.ExtTextOut(0,0,ETO_CLIPPED,&m_rcClient,m_ShowStr,NULL);
dc.SetBkMode(oldBkMode);
dc.SelectObject(pOldFont); // Do not call CStatic::OnPaint() for painting messages
}
有个奇怪的现象,如果我将对话框上的一个static对象改成我的这个类,就可以正确显示文字(也能透明显示背景图片),但如果我定义一个CTransparent的对象m_Trans,然后m_Trans.Create()之后却不能透明显示背景图片,而是显示一个白色的背景,为什么?我的Create代码:
BOOL CTransparent::Create(CWnd* pParent, int WndID, CRect rect,CString ShowStr)
{
m_pParent = pParent;
m_WndID = WndID;
m_Rect = rect;
m_ShowStr = ShowStr;
return this->Create(NULL,_T("CTransparent"),WS_CHILD|WS_VISIBLE ,m_Rect,pParent, WndID);
}void CTransparent::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
GetClientRect(m_rcClient);
CFont* pOldFont = dc.SelectObject(&m_Font);
int oldBkMode = dc.SetBkMode(TRANSPARENT);
dc.Rectangle(CRect(0,0,50,50));
dc.SetTextColor(RGB(255,0,0));
dc.ExtTextOut(0,0,ETO_CLIPPED,&m_rcClient,m_ShowStr,NULL);
dc.SetBkMode(oldBkMode);
dc.SelectObject(pOldFont); // Do not call CStatic::OnPaint() for painting messages
}
CTransparent类就可以透明显示背景,怪!
CDC *pDC = m_pParent->GetDC()
int oldBkMode = pDC->SetBkMode(TRANSPARENT);
....
pDC->SetBkMode(oldBkMode);
pDC->DeleteDC();