社区
界面
帖子详情
OnEraseBkgnd 和DrawItem
kker123
2011-07-11 08:37:38
这两个函数的作用有什么区别,绘制时应该用哪个?
...全文
138
17
打赏
收藏
OnEraseBkgnd 和DrawItem
这两个函数的作用有什么区别,绘制时应该用哪个?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
你是不是想做这种东西
http://topic.csdn.net/u/20100726/15/882a0e1b-eb37-42c0-81be-4acc4a271a60.html
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不可以
那样画出来的是矩形,不是不规则图形
VC之美化界面篇本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础:
WM_
DRAW
ITEM
* WM_MEASURE
ITEM
* NM_CUSTOM
DRAW
* 注意,标注*的消息是子元素发送给父窗口的通知消息,其它的为窗口或者子元素自身的消息。 3.3.1 WM_PAINT WM_PAINT消息相信大家都很熟悉,一个窗口要重绘了,就会...
[00008]-[2015-08-21]-[00]-[Windows 程序设计 --- On
Erase
BkGnd
() OnPaint()
Draw
Item
() 绘图处理]...
而在OnPaint里面,由于它隐含的调用了On
Erase
BkGnd
,而你又没有处理On
Erase
BkGnd
函数,这时就和窗口缺省的背景刷相关了.缺省的On
Erase
BkGnd
操作使用窗口的缺省背景刷刷新背景(一般情况下是白刷),而随后你又自己重画背景...
Draw
Item
今天从CButton派生了一个类CUIButton,主要用于自绘,按照基本的流程,重写
Draw
Item
方法。 步骤如下:点击CUIButton按钮,在右键弹出菜单中选择“add windows message Handler", 找到
Draw
Item
,为其添加消息映射...
MFC中的窗体绘制事件函数:OnCtlColor、OnPaint、OnNcPaint、On
Draw
Item
、On
Erase
Bkgnd
、On
Draw
文章目录 CWnd::OnCtlColor CWnd::OnPaint CWnd::OnNcPaint CWnd::On
Draw
Item
CWnd::On
Erase
Bkgnd
CWnd::InvalidateRect CView::On
Draw
参考:https://learn.microsoft.com/ CWnd::OnCtlColor 即将绘制子控件时,...
自绘CTabCtrl类可以改变背景色(VC)
virtual void
Draw
Item
(LP
DRAW
ITEM
STRUCT lp
Draw
Item
Struct); afx_msg BOOL On
Erase
Bkgnd
(CDC* pDC); //}}AFX_VIRTUAL // Implementation public: virtual ~CTabCtrlST(); // Generated message map ...
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章