gpt4 book ai didi

winforms - 绘制CheckBox时如何确定合适的尺寸?

转载 作者:行者123 更新时间:2023-12-02 04:13:56 25 4
gpt4 key购买 nike

我正在帮助某人转换一堆乱七八糟的面板和700个精心放置的复选框,并使之更加理智。我的计划是实现一个自定义控件,该控件使用ControlPaint类手动绘制复选框。这样可以更轻松地处理数据,并且从表单中删除700个GDI句柄可能是一件好事*。

ControlPaint.DrawCheckbox()接受Graphics,复选框的边界和ButtonState。界限似乎很有趣;我认为该行为可能是:

  • 如果我提供了太多空间,则会在这些边界的中心绘制一个复选框。
  • 我得到一个与我指定的范围一样大的复选框。

  • 因此,我使用100x100矩形进行了边界测试,发现结果是100x100复选框。有趣!但是,我只想要一个普通的旧复选框,该复选框显示系统默认的复选框大小。我希望这将是对诸如GetSystemMetrics()之类的一些API函数的调用,但是我不确定是否有什么方法是正确的方法。 (也许是SM_CXMENUCHECK?这似乎只是偶然的关系。)

    CheckBoxRenderer以正确的大小呈现。我将使用它,但是我不喜欢不知道该怎么做。因此,我与Reflector一起闲逛,看看它在做什么。如果您使用某种视觉样式进行渲染,它将调用GetThemePartSize(),这是一个相当复杂的API调用,但至少可以回答我如何获得视觉主题的尺寸。有趣的是,如果不使用视觉样式,则似乎会返回硬编码的尺寸:13x13。系统的复选框大小是否确实硬编码为13像素见方,还是MS的一个懒惰监督?

    这个问题的重点不是要告诉我仅使用CheckBoxRenderer。我已经在做我很好奇如何找到自己的尺寸,在编写使用Reflector的过程中,现在我很好奇尺寸实际上是否无法更改。

    *我知道,即使您找到一种使用负内存的方法,在屏幕上放置700个东西也不是一个好主意。该项目的第2步建议进行更合理的设计。 DataGridView已经被认为是不合适的东西。我试图一次使事情迈出一步,而且我也真的很好奇是否有一种方法可以确定系统的复选框大小。

    最佳答案

    有一种简单的方法来获取大小。

    1,您将一个实际的CheckBox实例添加到您的窗体。
    2,将其放置在无法看到的位置。位置=(-1000,-1000)
    3,将复选框文本设置为要测量的内容。
    4,使用checkBox1.GetPreferredSize(Size.Empty)

    然后,这将给出首选大小,即使用您给定的当前文本设置绘制该控件所需的实际大小。

    关于winforms - 绘制CheckBox时如何确定合适的尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3721664/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com