重金悬赏:子窗体重画问题(非MDI子窗体)

snaill 2007-08-01 03:52:49
做一个窗体,在窗体内定义子窗体,如下:
CWnd m_wnd1;
CWnd m_wnd2;
在父窗体OnCreate的时候创建:
m_wnd1.Create( NULL, _T("test1"), WS_CHILD | WS_CAPTION | WS_SYSMENU | WS_VISIBLE, CRect( 0, 0, 100, 100 ), this, 1000 );
m_wnd2.Create( NULL, _T("test2"), WS_CHILD | WS_CAPTION | WS_SYSMENU | WS_VISIBLE, CRect( 100, 100, 200, 200 ), this, 1001 );

运行后,将子窗体在窗体上拖动,正常不会有问题,可当两个窗体互相压盖的时候,拖动下面的窗体,则子窗体好像没有收到重画事件,导致界面混乱。
请问,为什么会出现这样的问题,应该如何解决?

另注:由于项目所限,无法使用MDI,请勿提出MDI相关方案,谢谢!
...全文
357 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyg_zy 2007-08-02
  • 打赏
  • 举报
回复
我仔细看了看 WS_CLIPSIBLINGS 的解释,我觉得原因是:
当你没有WS_CLIPSIBLINGS时,窗口挪动时,它将重绘重叠部分,而同时,兄弟窗口也重绘重叠部分所以导致花屏。
如果你加了WS_CLIPSIBLINGS,则重叠部分都不绘制,则就当然不花屏了。
lyg_zy 2007-08-02
  • 打赏
  • 举报
回复
已测试,确实WS_CLIPSIBLINGS后就可以了.
m_wnd1.Create( NULL, _T("test1"), WS_CLIPSIBLINGS |WS_CHILD | WS_CAPTION | WS_SYSMENU | WS_VISIBLE, CRect( 0, 0, 100, 100 ), this, 1000 );
m_wnd2.Create( NULL, _T("test2"), WS_CLIPSIBLINGS |WS_CHILD | WS_CAPTION | WS_SYSMENU | WS_VISIBLE, CRect( 100, 100, 200, 200 ), this, 1001 );
Bear520leon 2007-08-02
  • 打赏
  • 举报
回复
m_wnd1.Create( NULL, _T("test1"), WS_CLIPSIBLINGS |WS_CHILD | WS_CAPTION | WS_SYSMENU | WS_VISIBLE, CRect( 0, 0, 100, 100 ), this, 1000 );
m_wnd2.Create( NULL, _T("test2"), WS_CLIPSIBLINGS |WS_CHILD | WS_CAPTION | WS_SYSMENU | WS_VISIBLE, CRect( 100, 100, 200, 200 ), this, 1001 );
oldn123 2007-08-02
  • 打赏
  • 举报
回复
Mackz(在相互)
的办法就可以
WS_CLIPSIBLINGS
菜牛 2007-08-01
  • 打赏
  • 举报
回复
加上WS_CLIPSIBLINGS样式就可以了。
emptyness 2007-08-01
  • 打赏
  • 举报
回复
关注..
snaill 2007-08-01
  • 打赏
  • 举报
回复
呵呵,好搞的话,就不用头疼了

但像Access就实现了,切换没有问题,不知道人家是怎么做的
dazedase 2007-08-01
  • 打赏
  • 举报
回复
在某个子窗体GetFocus/(OnMove/OnSize)时,启动一个极短的Timer(10ms~100ms),然后当子窗体OnTimer时,Invalidate自身,若想提高效率,可加一个判断过程,只有两个窗体重叠时才启动延时刷新.

我做过类似的东东,仅想出唯一的这个解决办法.
HuWenjin 2007-08-01
  • 打赏
  • 举报
回复
不太好搞~~ mark 一下
snaill 2007-08-01
  • 打赏
  • 举报
回复
要是有时间,可以编码试试,做一个SDI的程序,不要文档/视图,然后在ChildView里面加上上面4条语句,来回拖动子窗体试试

问题很明显
snaill 2007-08-01
  • 打赏
  • 举报
回复
就是说,当两个窗体重叠的时候,总有一个在上一个在下吧
激活下面的窗体,如果重画正常应该被切换到上面,但现在好像没有触发重画
所以一拖动,被拖动的子窗体就乱了,边框和内容混在一起

说到底,还是没有正确被激活,所以也没有接收到重画消息,但现在没搞清的是,为什么?
lyg_zy 2007-08-01
  • 打赏
  • 举报
回复
没看明白.
pomelowu 2007-08-01
  • 打赏
  • 举报
回复
拖动下面的窗体,则子窗体好像没有收到重画事件,导致界面混乱。

没看得很明白呢。。呵呵

15,979

社区成员

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

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