社区
界面
帖子详情
还是onpaint重绘问题
silentyear
2011-08-01 07:50:05
我建立了一个基于dialog的程序a,为了让程序保持重绘,我将用于在屏幕上进行绘制的功能块a放在对话框的onpaint函数体内,但是我发现有两个问题:
1、程序刚刚启动时,并没有绘制的效果,要动一下对话框才能进行显示。
2、我最大化另一个程序窗口b将a遮盖住,再最小化化窗口b,此时a也不能进行正常的重绘。
请问高手,是什么原因?非常感谢啊,困扰我好久了。。。
...全文
339
17
打赏
收藏
还是onpaint重绘问题
我建立了一个基于dialog的程序a,为了让程序保持重绘,我将用于在屏幕上进行绘制的功能块a放在对话框的onpaint函数体内,但是我发现有两个问题: 1、程序刚刚启动时,并没有绘制的效果,要动一下对话框才能进行显示。 2、我最大化另一个程序窗口b将a遮盖住,再最小化化窗口b,此时a也不能进行正常的重绘。 请问高手,是什么原因?非常感谢啊,困扰我好久了。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
silentyear
2011-08-02
打赏
举报
回复
[Quote=引用 15 楼 gz_qmc 的回复:]
http://www.chinahtml.com/0607/csharp-11537062385185.html
百度多了,你就知道了
[/Quote]
谢谢你~
先工作去了,顺便调试
gz_qmc
2011-08-02
打赏
举报
回复
http://www.chinahtml.com/0607/csharp-11537062385185.html
百度多了,你就知道了
silentyear
2011-08-02
打赏
举报
回复
[Quote=引用 9 楼 gz_qmc 的回复:]
在OnPaint里,请保持
CPaintDC dc(this);
但不要用dc绘图,因为dc是带剪裁的,遮盖后有刷新不到的问题
CDC *pDC=GetDC();
用pDC直接绘制到窗口
另外,要检去有效区,去掉控件占的位置(提倡)
或者,OnPaint结束的时候刷新所有控件(不提倡)
[/Quote]
谢谢你,我去试试看,另外,怎么减去有效区(控件占的位置)啊?
silentyear
2011-08-02
打赏
举报
回复
[Quote=引用 11 楼 xianglitian 的回复:]
应该是你的操作方式有问题
你OnPaint里怎么处理的
[/Quote]
我的onpaint里代码如下:
if()
{
}
else
{
cpaint dc(this);
dc.textout(20,20,"why ???");
cdialog::onpaint();
}
当我用另一个窗口b进行遮盖此窗口a,再最小化b后a上就没法输出字符串“why???”
silentyear
2011-08-02
打赏
举报
回复
程序在启动到画面呈出来首先肯定是经过OnPaint的,没有绘制的效果,只能说明你没绘制好。==
===
谢谢啊,对话框程序启动时,先执行inital,再执行onpaint么?我刚开始也这么认为,现在我怀疑启动时执行还是不执行onpaint了。。。
求高手解决啊
走好每一步
2011-08-02
打赏
举报
回复
无代码,无真相
向立天
2011-08-02
打赏
举报
回复
应该是你的操作方式有问题
你OnPaint里怎么处理的
gz_qmc
2011-08-02
打赏
举报
回复
补充:
去掉OnPain()里的
CDialog::OnPain()
gz_qmc
2011-08-02
打赏
举报
回复
在OnPaint里,请保持
CPaintDC dc(this);
但不要用dc绘图,因为dc是带剪裁的,遮盖后有刷新不到的问题
CDC *pDC=GetDC();
用pDC直接绘制到窗口
另外,要检去有效区,去掉控件占的位置(提倡)
或者,OnPaint结束的时候刷新所有控件(不提倡)
gibsonboy
2011-08-02
打赏
举报
回复
[Quote=引用 7 楼 silentyear 的回复:]
程序在启动到画面呈出来首先肯定是经过OnPaint的,没有绘制的效果,只能说明你没绘制好。==
===
谢谢啊,对话框程序启动时,先执行inital,再执行onpaint么?我刚开始也这么认为,现在我怀疑启动时执行还是不执行onpaint了。。。
求高手解决啊
[/Quote]
程序启动时OnInitDlg肯定比OnPaint先执行,问题是,你着重讲的是重绘问题,跟Init有关系,但不大,照你这么说,构造函数比Init先执行这也要强调出来了。你怀疑启动时执行还是不执行onpaint了,你在OnPaint下个断点进去调试不就知道了。我不是高手,但是你没贴码,估计再怎么高的手都够不着你了。
向立天
2011-08-02
打赏
举报
回复
[Quote=引用 13 楼 silentyear 的回复:]
引用 11 楼 xianglitian 的回复:
应该是你的操作方式有问题
你OnPaint里怎么处理的
我的onpaint里代码如下:
if()
{
}
else
{
cpaint dc(this);
dc.textout(20,20,"why ???");
cdialog::onpaint();
}
当我用另一个窗口b进行遮盖此窗口a,再最小化……
[/Quote]不要调用基类的OnPaint
gibsonboy
2011-08-01
打赏
举报
回复
[Quote=引用楼主 silentyear 的回复:]
我建立了一个基于dialog的程序a,为了让程序保持重绘,我将用于在屏幕上进行绘制的功能块a放在对话框的onpaint函数体内,但是我发现有两个问题:
1、程序刚刚启动时,并没有绘制的效果,要动一下对话框才能进行显示。
2、我最大化另一个程序窗口b将a遮盖住,再最小化化窗口b,此时a也不能进行正常的重绘。
请问高手,是什么原因?非常感谢啊,困扰我好久了。。。
[/Quote]
程序在启动到画面呈出来首先肯定是经过OnPaint的,没有绘制的效果,只能说明你没绘制好。
动一下才能显示,实际上触发OnSize,OnSize再MoveWindow,接着再调用OnPaint。将另外一个程序盖住它,再显示,这里只会触发窗口重绘,也就是再次调用OnPaint,但是并没有绘制出来...
因为你没贴代码,所以不知道你是怎么画的,但是希望通过我所说的这两点,能够给你提示些信息...
我才是心翼
2011-08-01
打赏
举报
回复
切换窗口的时候,窗体一样会发生重绘的
我才是心翼
2011-08-01
打赏
举报
回复
oninitialupdate函数是个虚函数吧,要你自己重载的,它是在OnDraw函数以前被调用的,你可以手动加。dialog估计也行吧
silentyear
2011-08-01
打赏
举报
回复
[Quote=引用 2 楼 doctorwing 的回复:]
写在OnInitialUpdate()试试
[/Quote]
啊,我的程序是基于dialog的,主窗体应该就是对话框。。。没有oninitialupdate函数。。。
我才是心翼
2011-08-01
打赏
举报
回复
写在OnInitialUpdate()试试
我才是心翼
2011-08-01
打赏
举报
回复
1、动一下就是重绘,刚启动没有。刚启动的OnPaint()是给的对话框么还是主窗体?你动对话框,当然就是对话框响应WM_PAINT消息了
2、这个盖来盖去的问题,应该还是和VIEW类有关,就好像在VIEW上面打字,输入法的框子挡住了,一样出不来汉字是一个道理。
个人意见仅供参考 如有雷同实属巧合
On
Paint
重绘
窗体
重写窗体
重绘
事件 protected override void On
Paint
(
Paint
EventArgs e) { e.Graphics.DrawImage((Image)pic,new Point(0,0));//
重绘
窗体 }
MFC树控件
重绘
使用On
paint
重绘
树控件,树控件图片动态载入,达到了一般聊天工具基本功能(大小头像的转换,浮动提示框,鼠标移动改变背景色,姓名和心情同行不同字体格式等一些功能),现在与大家一起分享,绝对值5分,保证你不...
VC++对话框程序picture控件图像
重绘
基于MFC对话框程序,利用picture控件显示位图,并可实现图像
重绘
。内有代码与实现之详细步骤。
重绘
进度条
本例程是通过重写On
Paint
()函数实现对进度条
重绘
的
MFC双缓冲及
重绘
示例
2、手动
重绘
原理: 利用内存设备的BitBlt()函数将初始CDC选入。将上面第⑤步的设备互换。 */ /* 程序过程: 1、绘制背景,在函数DrawSome()中实现;并将其放在On
Paint
()函数中,保证每次刷新时依然存在; 2、...
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章