5

私は現在、初めて Windows 用の GUI を設計しています。MFC と Visual Studio 2008 を使用しています。プログラムを設計しているモニターのネイティブ解像度は 1680x1050 です。プログラムをコンパイルして、同僚のコンピュータ (通常は 1024x768 で動作するラップトップ) で実行するために送信すると、私のプログラムは同僚の画面に収まりません。

すべての解像度で実行できるように MFC アプリケーションを設計する方法について調べてみましたが、誤解を招く情報が見つかり続けています。どこを見ても、DLU はアプリケーションのサイズを変更するものであり、問​​題が発生するのは、解像度を気にする必要がある実際のビットマップがある場合だけです。しかし、この場合、モニターをより低い解像度に設定すると、プログラムが画面に収まらなくなるのはなぜですか? 私のプログラムは、1680x1050 で使用するのと同じ量の画面領域を占有するために「縮小」する代わりに、巨大で粒子が粗くなります。

ここでの「明白な」解決策は、解像度を 1024x768 に設定し、画面に収まるようにプログラムを再設計することです。ただし、1024x768 で実行されている画面にプログラムが収まるように、ダイアログのすべてを可能な限り押しつぶしました。私のダイアログ フォントは Microsoft Sans Serif 8 に設定されていますが、1024x768 で実行すると、依然として巨大 (8 ポイントよりはるかに大きい) に見えます。

私のプログラムが同じスケーリングを維持する方法が必要であることは知っています...そうですか?それとも、これは問題にアプローチする間違った方法ですか? 800x600以上など、多くの解像度で実行できるようにMFCプログラムを設計するための正しい/標準的な方法は何ですか?

4

3 に答える 3

3

あなたのアプリケーション GUI はダイアログ ベース (メイン ウィンドウはダイアログ) だと思いますか?

あなたが発見したように、MFCはダイアログのサイズを正しく変更することをサポートしていないため、その場合は問題があります。オプションは次のとおりです。

  • GUI を再設計して、SDI または MDI GUI を使用します。
  • ダイアログのサイズ変更拡張機能を使用します。いくつかの非常に良い提案については、この質問を参照してください。別のオプションはthis onethis oneです。
  • MFC を使用しないでください。wxWidgets は、ダイアログのサイズ変更をより適切にサポートしています。
于 2009-06-26T03:36:16.393 に答える
2

MFCは、WindowsAPIの単なる薄いラッパーです。これらは両方とも、ほとんど真実ではないという仮定を立てています。より高い解像度の画面を使用している場合は、WindowsでDPIまたはフォントサイズを調整して、より大きな文字を取得します。ほとんどの場合、画面サイズが大きいということは、物理モニターが大きいこと、またはできるだけ多くの情報を小さな画面に詰め込みたいラップトップを意味します。人々はより詳細よりもより多くの情報を大切にしています。したがって、仮定は失敗します。

UI全体をサポートする必要のある最小サイズの画面に詰め込めない場合は、UI全体を小さくする別の方法を見つける必要があります。UIについて何も知らなくても、タブを使用してコントロールをページにグループ化することをお勧めします。

大画面の人が一度により多くの情報を見ることができるように、ウィンドウのサイズを変更できるようになりました。これは難しい方法で行う必要があります。ウィンドウへのWM_SIZEメッセージに応答し、どのコントロールを大きくするか、どのコントロールを移動するかを決定します。

于 2009-06-26T04:26:52.120 に答える
1

解像度が変更されたときにダイアログのコンテンツのサイズを自動的に変更する方法はありません。したがって、いくつかの境界を設定する必要があります。

オプション1. 顧客向けにアプリを開発している場合は、最小解像度(1024x7678など)を1つ選択し、すべてが収まるようにダイアログを再設計します。たぶん、いくつかをいくつかに分割するか、タブストリップコントロールを使用します。

オプション2. サポートする解像度ごとに個別のダイアログフォームを作成しますが、同じクラスを使用して処理します。実行時に解決策を検出し、適切なフォームを使用します。

オプション3. ユーザーが自分の好みに合わせてダイアログのサイズを調整できるように、独自のサイズ変更機能を作成します。

于 2009-06-26T03:57:36.820 に答える