我正在尝试通过处理WM_NCPAINT
和WM_NCACTIVATE
在窗口上绘制自己的非客户区域。问题是当我调整窗口大小时,底部和右侧边缘花费的时间太长,无法“赶上”并适应新的窗口大小。这不是慢速或效率低下的渲染代码的结果,因为即使在WM_NCPAINT
处理程序完全为空的情况下也会发生。
如果我在处理程序中调用DefWindowProc
,或者根本不处理NCPAINT,这种奇怪的行为就会停止,并且在调整窗口大小时,右下角完全不会移动。 / p>
我尝试在NCPAINT处理程序中强制执行窗口更新,但是问题并没有消失。
Here,您可以看到我在说什么。只需忽略由于缺少窗框而造成的丑陋外观。在演示中,WM_NCPAINT
处理程序中没有绘图代码,它只是向WndProc回调返回0。
我的问题是,在绘制自己的窗框后如何保持底部和右侧边缘固定,同时调整大小与普通窗口一样?
编辑
这是处理Windows消息的代码。还没有渲染代码,因为首先我要在调整大小时摆脱怪异的行为。
LRESULT CALLBACK wndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_NCACTIVATE:
case WM_NCPAINT:
{
// DefWindowProc(hWnd, uMsg, wParam, lParam);
// Custom frame rendering will be done here
return 0;
}
}
return CallWindowProc(prevWmdProc, hWnd, uMsg, wParam, lParam);;
}
请注意,如果我取消注释DefWindowProc
调用,则窗口在调整大小期间将开始正常运行。显然,此方法可以在大小改变时不断地更新窗口的工作区。我无权访问此方法的源代码,所以我不知道它是如何工作的。