winforms 动态更改位置时,Windows窗体应用程序DPI支持不起作用

kx5bkwkv  于 2022-11-17  发布在  Windows
关注(0)|答案(1)|浏览(147)

有一个启用了DPI支持的Windows窗体应用程序。当我更改显示缩放比例并再次运行该应用程序时,以下标签正确对齐。我需要根据某些情况更改其位置,所以我在C中设置了lbl_multi_component_brine_的Location属性。在这种情况下,DPI支持由于某种原因不起作用。标签总是显示在那个位置,无论显示比例如何。这是否意味着DPI支持只在资源文件中指定位置时才起作用?这是否意味着我应该考虑DPI来计算坐标,并在C中设置,或者有一些解决方案将跳过该计算。

<data name="lbl_multi_component_brine_.AutoSize" type="System.Boolean, mscorlib">
    <value>True</value>
  </data>
  <data name="lbl_multi_component_brine_.Location" type="System.Drawing.Point, System.Drawing">
    <value>19, 10</value>
  </data>
  <data name="lbl_multi_component_brine_.Size" type="System.Drawing.Size, System.Drawing">
    <value>92, 13</value>
  </data>
  <data name="lbl_multi_component_brine_.TabIndex" type="System.Int32, mscorlib">
    <value>148</value>
  </data>
  <data name="lbl_multi_component_brine_.Text" xml:space="preserve">
    <value>Brine</value>
  </data>
  <data name="&gt;&gt;lbl_multi_component_brine_.Name" xml:space="preserve">
    <value>lbl_multi_component_brine_</value>
  </data>
  <data name="&gt;&gt;lbl_multi_component_brine_.Type" xml:space="preserve">
    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </data>
  <data name="&gt;&gt;lbl_multi_component_brine_.Parent" xml:space="preserve">
    <value>panel_mc_brine_</value>
  </data>
  <data name="&gt;&gt;lbl_multi_component_brine_.ZOrder" xml:space="preserve">
    <value>0</value>
  </data>
tsm1rwdh

tsm1rwdh1#

我在C++中每次设置坐标时都会考虑DPI,并使用以下函数对其进行转换,从而解决了这个问题:

static int DPI_POS(int pos, System::Windows::Forms::Control^ control) 
{
  System::Drawing::Graphics^ g = control->CreateGraphics();
  return int(pos * g->DpiX / 96);
}

相关问题