我对"简单"有问题。任务。更改窗体的边框大小,同时保留所有默认行为。
更改窗口的边框大小(非客户区域)是通过在WndProc中处理WM_NCCALCSIZE完成的,虽然它确实更改了边框大小,但它会带来一些调整大小的问题(请注意,如果您设置了非客户区域为0,您将不会遇到与丢失默认行为相同的问题。
遵循ReferenceSource上的Control和Form的代码(referencesource.microsoft.com)我得出结论,问题出现是因为AdjustWindowRectEx函数使用默认的表格边框大小来计算大小。由于AdjustWindowRectEx被多次调用,并且并非所有使用它的函数都可以被覆盖,因此在某些情况下,表单的大小不正确。
有没有人知道告诉adjustWindowRectEx边框大小(非客户区域)的方法,或任何其他方式使用自定义大小的非客户区域而不破坏默认行为?
破损行为清单:
注意:Form会变小或变大,具体取决于FormBorderStyle和自定义客户区的大小。