由于特定原因,我需要知道Winforms表单的每个标题栏按钮的确切宽度:最大化,最小化和关闭按钮。
代码必须在高于或等于Windows XP SP3的Windows版本上正常工作。
我尝试在Form类中以下列方式执行此操作:
var graphics = CreateGraphics();
var renderer = new VisualStyleRenderer(VisualStyleElement.Window.CloseButton.Normal);
Size closeButtonWidth = renderer.GetPartSize(graphics, ThemeSizeType.True);
我在表单的OnSizeChanged
覆盖中调用此代码。
在我的Windows 8操作系统上试用这段代码,我发现返回值非常错误:返回大小为:{Width = 28,Height = 17}。
我在显示器屏幕上可以看到的实际尺寸是下一个:{宽度= 45,高度= 19}(无法发布图像,因为我还没有足够的声誉)。
对于其他表单标题按钮,例如最小化或最大化,VisualStyleRenderer.GetPartSize
也会返回错误的值:{宽度= 5,高度= 17}。
那么我做错了什么?