MFC:怎样使dialog上的控件对dialog透明

greentape 2000-12-13 01:31:00
我有一个dialog带背景图(在OnEraseBkgnd中用BitBlt画上的),
怎样使此dialog上的控件, 如edit box, lable(static)... 透明?

...全文
718 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rabit9556 2000-12-14
  • 打赏
  • 举报
回复
static 可以做成透明的,生成一个CStatic或CWnd的派生类,可以做成透明的控件,只需在派生类中重载Create()函数,还可以自己设置字体和颜色,下面是我的例子:
CMyStatic::CMyStatic()
{
}

CMyStatic::~CMyStatic()
{
}


BEGIN_MESSAGE_MAP(CMyStatic, CWnd)
//{{AFX_MSG_MAP(CMyStatic)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CMyStatic message handlers

BOOL CMyStatic::Create(CWnd* pwndParent, UINT wID)
{
// TODO: Add your specialized code here and/or call the base class
CWnd* pwndStatic = pwndParent->GetDlgItem (wID);

if (pwndStatic != (CWnd*) 0)
{
DWORD dwStyle = pwndStatic->GetStyle();
CString strText;
CRect rectStatic;

// Get the window text
pwndStatic->GetWindowText (strText);

// Get the window position and convert from screen -> client
pwndStatic->GetWindowRect (rectStatic);
pwndParent->ScreenToClient(rectStatic);


pwndStatic->DestroyWindow();

return CWnd::Create (NULL,
strText,
dwStyle,
rectStatic,
pwndParent,
wID,
NULL);
}


return FALSE;
}

void CMyStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
CRect rect;
GetClientRect(&rect);
CFont myFont;
myFont.CreateFont (45, 0, 0, 0, FW_BOLD, FALSE, FALSE,
0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH&FF_SWISS, "楷体");

CFont *pOldFont=(CFont *)dc.SelectObject (&myFont);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(255,255,0));
dc.DrawText("I LOVE YOU", rect, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
dc.SetBkMode (OPAQUE);
dc.SelectObject (pOldFont);
myFont.DeleteObject ();

// Do not call CWnd::OnPaint() for painting messages
}
huangzubin 2000-12-14
  • 打赏
  • 举报
回复
try GetDC()->SetBkMode(TRANSPARENT)
xiaoyuer 2000-12-14
  • 打赏
  • 举报
回复
应该在Dialog绘制控件之前,保存控件所掩盖的那一部分父窗体背景,
绘制的时候再重绘区域——想想好像只有用子类化比较好一些。
vcbear 2000-12-14
  • 打赏
  • 举报
回复
其实对edit box的文字都不行。不过要简单,就是这样了。没有白吃的午餐,老老实实做自画吧。呵呵。
greentape 2000-12-14
  • 打赏
  • 举报
回复
vcbear> 对edit box有用, 但static还是不行.
greentape 2000-12-14
  • 打赏
  • 举报
回复
vcbear> 对edit box有用, 但static还是不行.
greentape 2000-12-14
  • 打赏
  • 举报
回复
vcbear> 对edit box有用, 但static还是不行.
greentape 2000-12-14
  • 打赏
  • 举报
回复
谢谢大家, 大致该做些什么已经知道了.
jimliang 2000-12-13
  • 打赏
  • 举报
回复
试一试动态创建控件。
ab 2000-12-13
  • 打赏
  • 举报
回复
如果对话框是带背景图片的,把按钮设成自画的,需要重画时从背景图片上复制一个矩形区域,至于位置,可以临时计算。
greentape 2000-12-13
  • 打赏
  • 举报
回复
vcbear>
sorry, 我再好好试试
vcbear 2000-12-13
  • 打赏
  • 举报
回复
想简单,就是CTLCOLOR了,不可能没有用。至少edit box,label上没字的地方都可以和
背景一样。我很多界面都是这样作的。
greentape 2000-12-13
  • 打赏
  • 举报
回复
Erlin>
我还没有试过重载, 子类化等等方法, 我觉得这些可能都是比较麻烦的方法,
特别是当你的dialog上用到了很多种/个控件的时候.

我还在找简单的方法
greentape 2000-12-13
  • 打赏
  • 举报
回复
that Visible idea is just fucking great. (:
随风bj 2000-12-13
  • 打赏
  • 举报
回复
那就将其的Visible属性去掉吧,呵呵
greentape 2000-12-13
  • 打赏
  • 举报
回复
CBrush br(&Bm)不管用,
而且也不可能管用。
thanks anyway. keep going soldier.
Erlin 2000-12-13
  • 打赏
  • 举报
回复
重载CCommandButton的OnPaint(),用bitblt将位图粘上去,不行吗?
greentape 2000-12-13
  • 打赏
  • 举报
回复
Modifystyle WS_EX_TRANSPARENT不管用
vcbear 2000-12-13
  • 打赏
  • 举报
回复
try CBrush br(&Bm) //Bm is your bitmap
greentape 2000-12-13
  • 打赏
  • 举报
回复
背景是图, bmp, 不是单一的颜色或线条, 所以光改变brush是不够的
加载更多回复(5)

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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