散分!CEdit自绘背景

xladykiller 2010-08-13 03:53:15
CEdit背景自绘.
方案:
在CtlColor设置透明.
在OnEraseBkgnd自绘.
在OnEnChange使之无效.
代码如下.

#pragma once


// CBmpEdit

class CBmpEdit : public CEdit
{
DECLARE_DYNAMIC(CBmpEdit)
public:
CBmpEdit();
virtual ~CBmpEdit();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
public:
CBitmap m_Bitmap;
CBrush m_Brush;
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnEnChange();
};

响应WM_ERASEBKGND

CBmpEdit::CBmpEdit()
{
m_Bitmap.LoadBitmap(IDB_BITMAP1);
}
BOOL CBmpEdit::OnEraseBkgnd(CDC* pDC)
{
//TODO: 在此添加消息处理程序代码和/或调用默认值
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(&m_Bitmap);
BITMAP m_Bmp;
m_Bitmap.GetBitmap(&m_Bmp);
CRect rect;
GetClientRect(&rect);
//拉伸贴图
pDC->StretchBlt(0,0,rect.Width() ,rect.Height(),&memDC,0,0,m_Bmp.bmWidth,m_Bmp.bmHeight,SRCCOPY);
memDC.DeleteDC();
return TRUE;
//return CEdit::OnEraseBkgnd(pDC);
}

响应=WM_CTLCOLOR
HBRUSH CBmpEdit::CtlColor(CDC* pDC,  UINT nCtlColor)
{
// TODO: 在此更改 DC 的任何属性
//透明
pDC->SetBkMode(TRANSPARENT);
//字体色彩
pDC->SetTextColor(RGB(0,255,0));
//空的画笔
return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
}

最后,

void CBmpEdit::OnEnChange()
{
//使无效
Invalidate();
}

这里需要注意的是,设置透明是在=WM_CTLCOLOR里设置的,不是在WM_CTLCOLOR中.
有=的是从父窗口反射回来的消息.当然也可以在父窗口的WM_CTLCOLOR中设置透明,不过这样就封装得不好了.
...全文
674 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jc5566 2011-11-24
  • 打赏
  • 举报
回复
不错哈
ghsd008 2010-08-14
  • 打赏
  • 举报
回复
虚心学习
icefairy 2010-08-14
  • 打赏
  • 举报
回复
接分 -----
lvxiangqun86 2010-08-14
  • 打赏
  • 举报
回复
不错不错,我也在学习这方面的东西
ttchenwei 2010-08-14
  • 打赏
  • 举报
回复
halfheart1121 2010-08-14
  • 打赏
  • 举报
回复
mark,学习下
Q446512799 2010-08-14
  • 打赏
  • 举报
回复
占位学习
猴头 2010-08-13
  • 打赏
  • 举报
回复
好人啊
ooomm 2010-08-13
  • 打赏
  • 举报
回复
来凑个热闹
Abcix 2010-08-13
  • 打赏
  • 举报
回复
虚心学习
skynfly 2010-08-13
  • 打赏
  • 举报
回复
谢谢lz,学习了
na_he 2010-08-13
  • 打赏
  • 举报
回复
学习。。。
zhangwuji154 2010-08-13
  • 打赏
  • 举报
回复
用这个方法改变过CEdit的背景色,没绘过图
m_tornado 2010-08-13
  • 打赏
  • 举报
回复
jf~
kemee 2010-08-13
  • 打赏
  • 举报
回复
接分,顺便学习
queatin_man 2010-08-13
  • 打赏
  • 举报
回复
学习一下,老长时间不做这方面了
aa65433 2010-08-13
  • 打赏
  • 举报
回复
接~~~~
chenjelly 2010-08-13
  • 打赏
  • 举报
回复
谢谢LZ,学习了
onlyliu 2010-08-13
  • 打赏
  • 举报
回复
JF......
Eleven 2010-08-13
  • 打赏
  • 举报
回复
分享帖??
接分。。。

1,649

社区成员

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

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