C#自定义非客户区域调整大小问题

时间:2016-12-01 15:15:05

标签: c# winforms

我对"简单"有问题。任务。更改窗体的边框大小,同时保留所有默认行为。

更改窗口的边框大小(非客户区域)是通过在WndProc中处理WM_NCCALCSIZE完成的,虽然它确实更改了边框大小,但它会带来一些调整大小的问题(请注意,如果您设置了非客户区域为0,您将不会遇到与丢失默认行为相同的问题。

遵循ReferenceSource上的Control和Form的代码(referencesource.microsoft.com)我得出结论,问题出现是因为AdjustWindowRectEx函数使用默认的表格边框大小来计算大小。由于AdjustWindowRectEx被多次调用,并且并非所有使用它的函数都可以被覆盖,因此在某些情况下,表单的大小不正确。

有没有人知道告诉adjustWindowRectEx边框大小(非客户区域)的方法,或任何其他方式使用自定义大小的非客户区域而不破坏默认行为?

破损行为清单:

  1. 每次在设计师中打开时,表格都会调整大小(因为 设计师序列化ClientSize而不是尺寸)
  2. 表单将在每次恢复时调整大小(从最大化/最小化状态)
  3. 还有一些其他问题但与主题无关
  4. 注意:Form会变小或变大,具体取决于FormBorderStyle和自定义客户区的大小。

0 个答案:

没有答案