请问Winamp风格的一起移动窗口的实现,MoveWindow()/SetWindowPos()不完美 (50分)

ecai 2002-03-15 03:06:14
请问如何实现类似Winamp风格的一起移动的窗口
我使用了3个窗口,需要移动时象winamp一样同时移动,现在是使用SetWindowPos()的方法实现,但是快速移动时有明显分离的情况发生,
请问有没有更好的简单方法???? (拜托不要采用什么移动时抓窗口图片隐藏窗口再显示的方法!!!) ~~~~~~~~

winamp应该就是几个子窗口同时移动的,而且在移动时窗口还是可以更新的
...全文
113 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
2ndboy 2002-03-18
  • 打赏
  • 举报
回复
你的窗口可以实时拖动吗?你拖动主窗口使用的是什么方法,说明白才能对症下药!
Flysnow 2002-03-18
  • 打赏
  • 举报
回复
你说的很有道理,不规则窗口,不知道你画成了什么样子
ecai 2002-03-18
  • 打赏
  • 举报
回复
我试验了OnMoving,但是效果还是不好
我把问题再说得清楚一些,我现在是想作一个类似Windows MediaPlayer
界面的东西,所以窗口是不规则的,而且我用了三个窗口来实现类似抽屉的打开/关闭窗口功能,结果在移动窗口时窗口会分离
OnMoving的方法好像对普通窗口看不出问题,是不是不规则的窗口(还有背景贴图)移动时更新的时间太多?

请各位给出更好的答复!
ecai 2002-03-18
  • 打赏
  • 举报
回复
ok
现在已经解决啦!
同时移动多个窗口,请使用DeferWindowPos() !
达到了完美的效果,其实MFC中就是这么做的,大家可以看CWnd的源代码,到wincore.cpp中查找即可
为了答谢各位回复朋友的支持,加一半分如何?
2ndboy 2002-03-15
  • 打赏
  • 举报
回复
你不是要实时移动吗?我的方法行啊!
不过用111222的更简单一些。
ecai 2002-03-15
  • 打赏
  • 举报
回复
别急,等我测试完一定给你加分
111222 2002-03-15
  • 打赏
  • 举报
回复
快给分啊你,动作好慢呦~
111222 2002-03-15
  • 打赏
  • 举报
回复
注意,上面的消息是WM_MOVING

一般窗口移动的历程是:

WM_MOVING -> WM_MOVING ->WM_MOVING ->WM_MOVE

WM_MOVE是代表窗口已经结束移动,这个时候你再Move别的Window自然会让窗口们出现分离。
111222 2002-03-15
  • 打赏
  • 举报
回复
50分少了点儿………………

我还是收下了,呵呵……………………


首先,你建立你的一个窗口的WM_MOVING消息的影射函数:

void CDlg1::OnMoving(UINT fwSide, LPRECT pRect)
{

MoveWindow(pRect);

CRect rc2;
pDlg2->GetWindowRect(&rc2);

//让对话框2在1的右边
pDlg2->MoveWindow(pRect->right,pRect->top,rc2.Width(),rc2.Height());

pDlg3->GetWindowRect(&rc2);

//让对话框3在1的下边
pDlg3->MoveWindow(pRect->left,pRect->bottom,rc2.Width(),rc2.Height());


}

好了,你可以给分了:)
ecai 2002-03-15
  • 打赏
  • 举报
回复
“在movewindow的时候调用别的窗口的moveWindow函数”
这种简单的方法快速移动时会有窗口分离的现象
BTW:我的几个窗口没有parent-child关系
想想看:如果是父窗口移动时,子窗口的移动不会有分离的现象,可能是SetRedraw(FALSE)然后再SetRedraw(TRUE)?但是没有成功
dct1999 2002-03-15
  • 打赏
  • 举报
回复
不会吧?在movewindow的时候调用别的窗口的moveWindow函数不行?我试过好象不会分离吧,你还作了什么操作?
ecai 2002-03-15
  • 打赏
  • 举报
回复
(SORRY)
你送给其它窗口对窗口的移动也没有意义啊
请问你使用这种方法实现了吗?if yes,请说得详细一些
ecai 2002-03-15
  • 打赏
  • 举报
回复
这种方法不好,窗口要处理的鼠标消息总会有不一样的时候
另外“所有”时什么概念呢?比如WM_MOUSEMOVE消息,它还有鼠标位置的参数,你送给
2ndboy 2002-03-15
  • 打赏
  • 举报
回复
将本窗口收到的所有(是所有)鼠标消息全部转发给要一起移动的窗口,由于移动机制一样,所以就跟着一起移动了。

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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