基于对话框的程序。编辑框实现透明,跟对话框背景图片颜色一样。
梦境传说 2011-10-24 03:34:30 MFC基于对话框的程序,要实现对话框中编辑框透明效果,融合对话框的背景图片,且对话框背景图片每隔几秒显示一张,不影响编辑框的透明效果。。(编辑框显示对话框背景图片的效果)
下面是我的部分代码:
我继承了CEdit的类,写了个编辑框的类CEditTrans。处理编辑框的透明效果。
EditTrans.h 文件:
private:
COLORREF m_TextColor;
COLORREF m_BackColor;
CBrush m_Brush;
// Operations
public:
void SetTextColor(COLORREF col) { m_TextColor = col;
UpdateCtrl(); }
void SetBackColor(COLORREF col) { m_BackColor = col;
UpdateCtrl(); }
private:
void UpdateCtrl();
//---------------------------------------------------------------
EditTrans.cpp 文件:
#include "stdafx.h"
#include "EditTrans.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CEditTrans
CEditTrans::CEditTrans()
{
m_TextColor = RGB(0, 0, 0);
m_BackColor = TRANS_BACK;
}
CEditTrans::~CEditTrans()
{
}
BEGIN_MESSAGE_MAP(CEditTrans, CEdit)
//{{AFX_MSG_MAP(CEditTrans)
ON_WM_CTLCOLOR_REFLECT()
ON_CONTROL_REFLECT(EN_UPDATE, OnUpdate)
ON_WM_LBUTTONDOWN()
ON_CONTROL_REFLECT(EN_KILLFOCUS, OnKillfocus)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditTrans message handlers
HBRUSH CEditTrans::CtlColor(CDC* pDC, UINT nCtlColor)
{
m_Brush.DeleteObject();
if (m_BackColor == TRANS_BACK) {
m_Brush.CreateStockObject(HOLLOW_BRUSH);
pDC->SetBkMode(TRANSPARENT);
}
else {
m_Brush.CreateSolidBrush(m_BackColor);
pDC->SetBkColor(m_BackColor);
}
pDC->SetTextColor(m_TextColor);
return (HBRUSH)m_Brush;
}
void CEditTrans::OnKillfocus()
{
UpdateCtrl();
}
void CEditTrans::OnUpdate()
{
UpdateCtrl();
}
void CEditTrans::OnLButtonDown(UINT nFlags, CPoint point)
{
UpdateCtrl();
CEdit::OnLButtonDown(nFlags, point);
}
void CEditTrans::UpdateCtrl()
{
CWnd* pParent = GetParent();
CRect rect;
GetWindowRect(rect);
pParent->ScreenToClient(rect);
rect.DeflateRect(2, 2);
pParent->InvalidateRect(rect, FALSE);
}
然后我在CTestEditDlg.h CTestEditDlg.cpp 文件中调用,但是显示不出透明的效果,编译运行都是正确的。就是不能显示透明效果,编辑的背景色不是对话框背景图片的颜色。。
望高手们帮忙解决。 谢谢! 然后我用关联的CEdit变量去调用,就是显示不出透明效果。
CTestEditDlg.h 文件:
public:
CFont m_EditFontTime;
CEditTrans m_EditTime;
CFont m_EditFontScore;
CEditTrans m_EditScore;