我正在使用DeferWindowPos功能进行一系列窗口大小调整。假设我已经打开DeferWindowPos句柄,并几次调用DeferWindowPos,现在我想取消所有操作:不调用EndDeferWindowPos。我尝试了CloseHandle(hDWP),但是它不起作用(崩溃)。如果我只是从函数中返回,我认为它将泄漏一个句柄。是否可以在不调用EndDeferWindowPos的情况下终止DeferWindowPos?
// Initialize
HDWP hDWP = BeginDeferWindowPos( ... )
for( ... )
{
// Calculate new rectangle
CRect dcNew;
...
// Oh,now I want to return from my function, I want to cancel everything
// Accumulate
hDWP = DeferWindowPos( hDWP, hWnd, 0,
rcNew.left,
rcNew.top,
rcNew.Width(),
rcNew.Height(),
SWP_NOZORDER );
}
// Finally
BOOL bResult = EndDeferWindowPos( hDWP );
如果无法做到这一点,我将简单地将它们累积在一个临时 vector 中,并在确定要全部完成时在最后调用Defer东西。
最佳答案
我看到的对任何一种“中止”功能的唯一引用是:
这来自here。