高手呢 ~关于自绘按钮的问题

VsirSoft 2008-04-22 06:16:07
自绘了一个从资源加载位图样式的按钮, 功能是实现好了 但是问题来了 我做了最大化最小化和关闭按钮在窗口右上角,当我拖动窗口改变大小的时候,这几个按钮会重叠一小块,然后便留下了一个残影在上面,当鼠标移动到上面 或者按F5刷新一下桌面又好了,我想这可能是因为我没有关闭自绘风格导致的,或者是没有让按钮失去焦点?麻烦各位高手帮忙,我的按钮是动态创建的,只有WS_VISIBLE和WS_CHILD风格.初始化按钮类的时候加了一个 ownerdarw风格.
...全文
126 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯石头 2008-04-24
  • 打赏
  • 举报
回复
重绘的问题
Eleven 2008-04-24
  • 打赏
  • 举报
回复
up
量子 2008-04-24
  • 打赏
  • 举报
回复
回7楼
CWnd::Invalidate 使CWnd的整个客户区无效
void Invalidate(BOOL bErase=TRUE);
参数:bErase为TRUE则删除更新区域的背景,为FALSE则不删除背景

一般的自绘空间在画控件之前,都需要先用自己的背景色覆盖整个控件客户区的,而这个颜色很可能和窗口的背景色不一样。
使用Invalidate(TRUE);有可能会产生闪烁效果(特别是两种背景色反差比较大的情况更明显)。

我一般都是先使用Invalidate(FALSE);当窗口界面存在明显的没有全部重绘缺陷时采用TRUE
yigerenjia 2008-04-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gaohl 的回复:]
DrawItem函数里面加
Invalidate(FALSE);试试
[/Quote]
应该是Invalidate(TRUE);吧!
milaoshu2 2008-04-23
  • 打赏
  • 举报
回复
改变对话框大小是,应该对按钮做处理,我觉得应该在OnSize()中处理
chenqing221284 2008-04-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gaohl 的回复:]
DrawItem函数里面加
Invalidate(FALSE);试试
[/Quote]

同意此种说法,建议试试.
Eleven 2008-04-23
  • 打赏
  • 举报
回复
up
量子 2008-04-23
  • 打赏
  • 举报
回复
DrawItem函数里面加
Invalidate(FALSE);试试
hityct1 2008-04-23
  • 打赏
  • 举报
回复
VsirSoft 2008-04-23
  • 打赏
  • 举报
回复
问题解决了,不知道是BUG还是什么,分享给大家希望能有用.

当窗口拖动的时候按钮会跟着动,所以动的方向也不同,只要让按钮依次排列挪动就不会出现覆盖了.
比如向左拉窗口时候 最小化按钮先往左,然后是最大化按钮往左,最后关闭按钮向左移动,反之则关闭按钮,最大化按钮,最小化按钮 依次移动这样遍不会发生重叠了.也就不会有残影在上面

15,979

社区成员

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

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