画面上のコントロールの絶対位置を取得しようとしています。私は2台のモニターを使用しており、その結果はそれほど素晴らしいものではありません。c#画面上の絶対位置コントロール
私がやっていることは、画像をキャプチャしてからこの画像をメインフォームに渡し、キャプチャフォームを閉じることです。私は、写真が撮影された同じ場所にメインフォームを表示したいと思います。例として私がしようとしていることの要点を得るには、WindowsでSnipping Toolを開き、スナップショットをキャプチャします。画像が撮影された場所にウィンドウが表示されます。
がLocation = new Point(Cursor.Position.X - CaptureBox.Width - CapturePanel.Location.X - CaptureBox.Location.X - 8, Cursor.Position.Y - CaptureBox.Height - CapturePanel.Location.Y - CaptureBox.Location.Y - 30);
CapturePanel画像を保存するCaptureBoxコントロールが含まれています
これは私がこれを行うために使用しています現在のコードです。私はフォームのボーダーとタイトルバーを補うために、Xの位置から8個とテロの位置から30個も取っていますが、これは唯一の問題はいくつかのコンピューターが異なるウィンドウスタイルを使用していることです。
ウィンドウの境界線とタイトルの幅/高さを取得するための方法がある場合、それは素晴らしいでしょう。
EDITは
これを解決するには、次のようになります。王の王は私にSystemInformationを指摘からの助けを借りて
Location = new Point(
Cursor.Position.X -
CaptureBox.Width -
CapturePanel.Location.X -
CaptureBox.Location.X -
SystemInformation.HorizontalResizeBorderThickness,
Cursor.Position.Y -
CaptureBox.Height -
CapturePanel.Location.Y -
CaptureBox.Location.Y -
SystemInformation.CaptionHeight -
SystemInformation.VerticalResizeBorderThickness
);
。あなたのWindow caption
のHeight
は、あなたがこの試すことができますするには
第一の方法の作品を、SystemInformation.CaptionHeightは、それがあるべきよりも小さかったです。ウィンドウ枠のサイズはどうですか? – Dragonphase
@Dragonphase 'CaptureBox'の場所を取得したい場合は、私の更新された答えを見てください。' Border size'を計算する必要はありません。 –
キャプチャされた画像の場所をメインフォームに渡していないので、これはうまくいきません。これを行うと、現在選択されているフォームのプライマリモニタ上の場所に絶対位置(たとえば1440)が追加されます。私は解決策を思いつきましたが、それは私のメインポストにあります。 – Dragonphase