基于对话框的程序。编辑框实现透明,跟对话框背景图片颜色一样。

梦境传说 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;
...全文
152 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦境传说 2011-10-25
  • 打赏
  • 举报
回复
谢谢各位,我一实现了。。
Eleven 2011-10-24
  • 打赏
  • 举报
回复
SetBKMode(TRANSPARENT);
以后return一个NULL_BRUSH空画刷
HBRUSH hb = GetStockObject(NULL_BRUSH);// 定义为成员变量

WM_CTLCOLOR响应函数OnCtlColor()中
...
pDC->SetBkMode(TRANSPARENT);
return br;
mhwer99 2011-10-24
  • 打赏
  • 举报
回复
网上有现成的类随便下载一个不就行了
hll127 2011-10-24
  • 打赏
  • 举报
回复
不是发了个网址给你看了吗,http://xjchilli.blog.163.com/blog/static/4534773920116177521362,直接用CstaticEx,可以透明,至于怎么实现的,你可以再看看。

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧