OnEraseBkgnd 和DrawItem

kker123 2011-07-11 08:37:38
这两个函数的作用有什么区别,绘制时应该用哪个?
...全文
138 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kker123 的回复:]

引用 8 楼 xianglitian 的回复:

引用 4 楼 kker123 的回复:

BOOL CTestButton::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CBrush brush(RGB(255,0,0));
pDC->SelectObject(brush);
return true;
//r……
[/Quote]
可以
你试一下不就知道了
kker123 2011-07-11
  • 打赏
  • 举报
回复
含有个问题郁闷的是,
void CTestButton::PreSubclassWindow()
{
// TODO: 在此添加专用代码和/或调用基类
ModifyStyle(0, BS_OWNERDRAW);

CRgn rgn;
rgn.CreateEllipticRgn(0,0,20,10);
SetWindowRgn(rgn,true);
rgn.DeleteObject();
CButton::PreSubclassWindow();
}
在这里创建的不规则按钮没有作用,还是矩形,怎能回事?
kker123 2011-07-11
  • 打赏
  • 举报
回复
void CTestButton::PreSubclassWindow()
{
// TODO: 在此添加专用代码和/或调用基类
ModifyStyle(0, BS_OWNERDRAW);

CRgn rgn;
rgn.CreateEllipticRgn(0,0,20,10);
SetWindowRgn(rgn,true);
rgn.DeleteObject();
CButton::PreSubclassWindow();

我已经在这里创建好形状了,现在想改变背景色,怎么做?
ndy_w 2011-07-11
  • 打赏
  • 举报
回复
可以,先setwindowrgn
kker123 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xianglitian 的回复:]

引用 4 楼 kker123 的回复:

BOOL CTestButton::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CBrush brush(RGB(255,0,0));
pDC->SelectObject(brush);
return true;
//return CButton::OnEraseBkgnd……
[/Quote]

我是想绘制个不规则按钮,可以用pDC->FillRect ?
向立天 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kker123 的回复:]

BOOL CTestButton::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CBrush brush(RGB(255,0,0));
pDC->SelectObject(brush);
return true;
//return CButton::OnEraseBkgnd(pDC);
}

我在这里设置按钮背景……
[/Quote]
你什么也没画啊
pDC->FillRect
CSharp_XinBing 2011-07-11
  • 打赏
  • 举报
回复
执行个FillSolidRect
CSharp_XinBing 2011-07-11
  • 打赏
  • 举报
回复
应该是在函数里,需要执行画图的函数吧。
或者是像你写的,选入CBRUSH,然后让CButton::OnEraseBkgnd执行画的操作?
快乐鹦鹉 2011-07-11
  • 打赏
  • 举报
回复
光选了,没做操作阿。到OnPaint时,可能pDC又会选入新的画刷
kker123 2011-07-11
  • 打赏
  • 举报
回复
BOOL CTestButton::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CBrush brush(RGB(255,0,0));
pDC->SelectObject(brush);
return true;
//return CButton::OnEraseBkgnd(pDC);
}

我在这里设置按钮背景色没反应,怎么回事?
怎么设置按钮背景色?
Eleven 2011-07-11
  • 打赏
  • 举报
回复
一般自绘里会使用到这两个,一个是WM_ERASEBKGND消息的处理函数,一个虚函数
向立天 2011-07-11
  • 打赏
  • 举报
回复
你在绘制什么
一般处理方式时OnEraseBkgnd直接返回true什么都不做
在OnPaint或DrawItem里绘制
快乐鹦鹉 2011-07-11
  • 打赏
  • 举报
回复
区别很大啊。OnEraseBkgnd,只是控件的背景阿。DrawItem是画背景之上的东西
向立天 2011-07-11
  • 打赏
  • 举报
回复
kker123 2011-07-11
  • 打赏
  • 举报
回复
void CTestButton::PreSubclassWindow()
{
// TODO: 在此添加专用代码和/或调用基类
ModifyStyle(0, BS_OWNERDRAW);
//设置按钮的有效区域
CRect rcDialog; (以定义)

GetClientRect (rcDialog) ;


//创建一个椭圆形的区域,并使用SetWindowRgn重设对话框的形状。
m_rgn.CreateEllipticRgn (0 , 0 , rcDialog.Width(),

rcDialog.Height ());
SetWindowRgn ((HRGN) m_rgn,TRUE );
//CButton::PreSubclassWindow();
}

BOOL CTestButton::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CBrush brush;
brush.CreateSolidBrush(RGB(255,0,0));
//pDC->SelectObject(brush);
CRect rect;
GetClientRect(&rect);
pDC->FillRgn(&m_rgn,&brush);
return true;
//return CButton::OnEraseBkgnd(pDC);
}

drawitem()为空

不显示按钮。。。。
向立天 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 kker123 的回复:]

pDC->FillRect不可以
那样画出来的是矩形,不是不规则图形
[/Quote]
你设置窗口了么?
你做不规则控件不得SetWindowRgn么
或者你用FillRgn
kker123 2011-07-11
  • 打赏
  • 举报
回复
pDC->FillRect不可以
那样画出来的是矩形,不是不规则图形

15,979

社区成员

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

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