none
高DPI対応MDI形式Win32プログラムでの閉じる・アイコン化・最大化ボタン RRS feed

  • 質問

  • MDI(マルチ ドキュメント インターフェイス)形式のWin32 プログラムを
    マニュフェストでDPI認識を「高いDPI認識」に設定し、
    高解像度ディスプレイ(200%程度)で実行した場合、
    MDIのドキュメントウィンドウを拡大表示(最大)にすると、
    右上の閉じる・アイコン化・最大化ボタンが小さすぎて識別できない。

    (Windowsのバグだと思うのですが)

    2017年1月23日 8:54

回答

  • 高解像度ディスプレイでDPIを350%にして試してみました。

    確かに、メニューバーの横の×ボタン等の記号のサイズが小さく、DPIが100%の場合と同じサイズで表示されていました。(不具合?)

    Win32ではないのですが、いくつかサンプルを試してみて、以下のMDIの実装では再現しませんでした。Win32で同じような実装が行えるか確認したわけではないのですが、参考になりますでしょうか?

    https://sourceforge.net/projects/win32-framework/?source=typ_redirect
    の"MDIFrameDemo"

    2017年1月24日 1:36
  • kenjinoteさんが提示されてる Win32++ プロジェクトは、MFCをさらに簡素化したようなフレームワークですが、MDIFrameDemo のコードを追うと、DPI に応じて子ウィンドウの最小化・最大化ボタンの大きさを変えるよう実装されてますね。

    質問者さんの言われる「Win32」というのが、C++ベースか Windows Forms か定かではありませんが、C++ベースならコードを精読すれば参考になるのではないかと思います。Forms だと・・・ちと厳しいかもしれませんね。


    本フォーラムは、ユーザー(開発者)同士で情報交換を行うためのコミュニティです。初めて利用される方は、以下のアナウンスをご覧ください。 https://social.msdn.microsoft.com/Forums/ja-JP/ca9ecfb7-4407-4fcb-b8bd-207d68257e68?

    2017年1月24日 10:06
    モデレータ

すべての返信

  • 高解像度ディスプレイでDPIを350%にして試してみました。

    確かに、メニューバーの横の×ボタン等の記号のサイズが小さく、DPIが100%の場合と同じサイズで表示されていました。(不具合?)

    Win32ではないのですが、いくつかサンプルを試してみて、以下のMDIの実装では再現しませんでした。Win32で同じような実装が行えるか確認したわけではないのですが、参考になりますでしょうか?

    https://sourceforge.net/projects/win32-framework/?source=typ_redirect
    の"MDIFrameDemo"

    2017年1月24日 1:36
  • kenjinoteさんが提示されてる Win32++ プロジェクトは、MFCをさらに簡素化したようなフレームワークですが、MDIFrameDemo のコードを追うと、DPI に応じて子ウィンドウの最小化・最大化ボタンの大きさを変えるよう実装されてますね。

    質問者さんの言われる「Win32」というのが、C++ベースか Windows Forms か定かではありませんが、C++ベースならコードを精読すれば参考になるのではないかと思います。Forms だと・・・ちと厳しいかもしれませんね。


    本フォーラムは、ユーザー(開発者)同士で情報交換を行うためのコミュニティです。初めて利用される方は、以下のアナウンスをご覧ください。 https://social.msdn.microsoft.com/Forums/ja-JP/ca9ecfb7-4407-4fcb-b8bd-207d68257e68?

    2017年1月24日 10:06
    モデレータ
  • 貴重な情報ありがとうございます。

    教えていただいたサンプルを調べたら、独自のメニューバーを実装し、

    inline void CMenuBar::DrawMDIButton(CDC& dcDraw, int iButton, UINT uState)

    で描画していました。

    これを参考にしたいと思います。

    大変ありがとうございました。

    2017年1月24日 10:46