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

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

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

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Windows

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

Q&A

1回答

4174閲覧

MFC dpiサイズを変更してもアプリごとに適用されないようにしたい

Yussa

総合スコア26

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Windows

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

0グッド

2クリップ

投稿2018/10/02 10:38

編集2018/10/04 10:59

イメージ説明

高解像度モニタで文字が小さくならないように、Windowsのコントロールパネルよりdipが100%以上に変更できますが、画面の文字やコントロールもそれに合わせて拡大されると思います。

ただ私のアプリでは標準コントロール以外に画像などを貼り付けたパーツを使用しており、このせいでアプリの画面が崩れてしまいます。

特定のアプリだけこの自動拡大の影響を受けずにもとの大きさで表示する方法はないでしょうか?

下記の2つは変更しても何も変わりませんでした。
・ショートカットの互換性プロパティで、「高DPI設定では画面のスケーリングを無効にする」
・VisualStudioのプロパティで、マニフェストツール「DPI認識の有効化」

宜しくお願い致します。

開発環境
VisualStudio2012 (MFC)
Windows7 64bit
MFCダイアログベース

参考
https://blogs.msdn.microsoft.com/ttanaka/2014/07/16/dpihigh-dpi-1-dpi/

https://blogs.msdn.microsoft.com/vcblog/2010/03/11/mfc-applications-now-default-to-being-dpi-aware/

https://docs.microsoft.com/ja-jp/windows/desktop/hidpi/high-dpi-desktop-application-development-on-windows

https://qiita.com/marksard/items/1cced8f28f2717741b2c

https://qiita.com/felis_silv/items/efee4b1a397b0b95100a

100%にした場合
イメージ説明

125%にした場合
イメージ説明

コントロールは相対的に再配置されるが、画像やピクセル指定をするとずれる。

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

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

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

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

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

guest

回答1

0

手元にVS2015しかありませんでしたので、ちょっとUIが違うかもしれませんがDPI認識を「なし」にすれば、
DPI仮想化環境下で動くようになります。

イメージ説明

Win7でしたらたしか125%以上でDPI仮想化機能がオンになり、
96DPI相当で描画されたものをOSが拡大して表示してくれます。

ただし、Desktop Window Manager (DWM) によってこの機能は動いていたと思いますので、
エアロを無効にしていたりするとDPI仮想化機能は動きません。

投稿2018/10/03 00:24

takabosoft

総合スコア8356

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

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

Yussa

2018/10/03 03:34

ご回答有難うございます。 勝手に拡大されてしまうことがレイアウト崩れの原因かと思いますので、それを簡単に回避できないか検討しております。上記DPI認識の設定をあり/なしどちらでも拡大されてしまうようです。 コントロールの座標を取得しても配置とは異なるようですので、拡大率を考慮した座標計算をする必要があるかもしれませんが、ちょっと手間です。
takabosoft

2018/10/03 04:15

ええと、DPI仮想化による拡大はアプリケーション側は96DPIとして描画&動作させられますので、見た目がくずれることはありません。DPI仮想化機能が働いていないのではないでしょうか。
Yussa

2018/10/04 11:14

ご回答有難うございます。なるほどです、仮想化をする方向で探したいと思います。ただDPI認識の設定を変えても変化はありませんでした。 新たにキャプチャを添付しました。実際の画面はもっと複雑ですが、位置関係が変わってしまっております。DPI仮想化が有効になるとビットマップも拡大されるのでしょうか?
takabosoft

2018/10/04 11:36

画像を見てみましたが、ボタンやテキストボックスがほんのりぼやけているのでDPI仮想化で動作していると思います。ピクチャーボックスにビットマップを貼っただけのような場合は、拡大されるはずです。movieアイコンや黒い四角がずれる原因はスクショだけではわかりません。
atata0319

2018/10/04 11:45

VSのバージョンが低いとdpiを認識しない設定をmanifestファイルに書き出してくれない問題があったような気がしますが、出力されているmanifestファイルの内容を確認されてはどうでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問