質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

1446閲覧

高解像度環境におけるWinAPIのウィンドウ情報取得に関して

Weapon

総合スコア106

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2021/06/27 08:42

前提・実現したいこと

モダンなWindowsAPIにおいて高解像度ディスプレイ対応を意識したPer-Monitor and Per-Monitor V2 DPI Awarenessなど向けのAPI群があると思いますが

(1)どのようにすれば正確にウィンドウの情報を取得できるでしょうか?

GetWindowRectGetClientRectは高解像度ディスプレイ以前にAeroなどの影を含むサイズを返しているのか正常なサイズを取得できません。
そこでGetWindowRectの代わりにDwmGetWindowAttributeなどの値を取得する方法が調べると出てきますがスクリーンショットを取って確認しても1pxズレていることがあります。スクリーンショットのサイズが正しいとは限りませんが

(2)どの値を基準に描画などをすればいいのかわかりません。

例えば高解像度ディスプレイにおいてClient領域のサイズを直接取得する関数を私は知らないのですが
Hi-DPIな関数AdjustWindowRectExForDpiを使ってクライアント領域を割り出すにしてもDwmGetWindowAttribute由来の1pxのズレが効いてくる可能性はあります。BitBlt関数の画面比や描画領域などわずかですが誤差が出るかもしれません。

(3)Client領域のベストな取得方法はなんでしょうか?

Windows11の発表もありこれ以降も環境は刻々と変わっていく気はしますがStoreもWin32を許容しましたしよろしくお願いします。

環境

Windows 10 Pro (19043.1081)
Visual Studio 2022 Preview (WinSDK 10.0.18362.0)
ディスプレイはDPI 96と192で検証

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問