首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

DeferWindowPos与MoveWindow的异同点?解决方案

2012-01-28 
DeferWindowPos与MoveWindow的异同点?常见到一些怪代码:C/C++ codeCRect rectGetClientRect(rect)HDWP h

DeferWindowPos与MoveWindow的异同点?
常见到一些怪代码:

C/C++ code
CRect rect;GetClientRect(rect);HDWP hdwp = ::BeginDeferWindowPos(5);hdwp && (hdwp=::DeferWindowPos(hdwp, m_ctl1.GetSafeHwnd(), NULL, 20, 20, rect.Width()-40, 16, SWP_NOZORDER));hdwp && (hdwp=::DeferWindowPos(hdwp, m_ctl2.GetSafeHwnd(), NULL, 20, 40, rect.Width()-40, 16, SWP_NOZORDER));hdwp && (hdwp=::DeferWindowPos(hdwp, m_ctl3.GetSafeHwnd(), NULL, 20, 60, rect.Width()-40, 16, SWP_NOZORDER));hdwp && (hdwp=::DeferWindowPos(hdwp, m_ctl4.GetSafeHwnd(), NULL, 20, 80, rect.Width()-40, 16, SWP_NOZORDER));hdwp && (hdwp=::DeferWindowPos(hdwp, m_ctl5.GetSafeHwnd(), NULL, 20, 100, rect.Width()-40, 16, SWP_NOZORDER));hdwp && ::EndDeferWindowPos(hdwp);


问题一:
1)BeginDeferWindowPos(5)这个数字,设多了或少了,会如何?
2)hdwp && (hdwp=::DeferWindowPos(hdwp, 里的hdwp,究竟是作什么用?
3)Begin或者End,有缺失会如何?
4)最主要的,与MoveWindow的异同点?

[解决办法]
如果你移动一个窗口,那么以前被这个窗口覆盖得窗口会立刻重绘。我估计Defer移动方式会在多个窗口同时移动完成后,才触发重绘,从而加快系统运行速度。估计普通应用没必要这么麻烦,只有诸如游戏、制图之类对重绘效率要求极高得才需要。

至于其中得5,象是需要同时移动得窗口得个数

Begin开始一个多窗口移动,End则是使移动开始执行。
hdwp当然指记录这么多个窗口同时操作得内部结构得句柄

热点排行