5

私は .NET CF ベースのグラフィックス アプリケーションを開発しています。私のプロジェクトには多くの描画画像が含まれています。アプリケーションを別のハンドセット解像度 (240 X 240、480 X 640) に移植することに決めました。

単一のソリューション/プロジェクト内でこれを達成するにはどうすればよいですか?

解決策に基づいて異なるプロジェクトを作成する必要はありますか? 一般的なファイルをどのように処理しますか? そして、すべてのデバイスで共通のクラスの 1 つを変更する必要があります。

ありがとう、クロノス

4

5 に答える 5

6

そのばかMusiGenesisに耳を傾けないでください。Windowsモバイルデバイスのさまざまな画面解像度を処理するためのはるかに優れた方法は、フォームの継承を使用することです。これは、最小限の労力で既存のCFアプリケーションに追加できます。

基本的に、各フォームは標準の240x320画面用に設計します。新しい解像度(たとえば240x240)のフォームを再配置する必要がある場合は、プロジェクトに新しいフォームを追加し、元の240x320フォームから継承させます。

public partial class frmDialog240x240: frmDialog

フォームだけでなく:

public partial class frmDialog240x240: Form

いつものように。元のフォームでは、各コントロールのModifiersプロパティを(デフォルトのPrivateではなく) Protectedに設定する必要があります。新しいフォームのデザイナには、継承元のフォームのすべてのコントロールが表示され、新しい画面のサイズに合わせて、必要に応じて移動したりサイズを変更したりできます(これは元のフォームには影響しません)。レイアウト)。

プログラムの実行中は、実行中のデバイスの画面解像度を確認して適切なフォームを作成するのは簡単です(これにはファクトリメソッドが適しています)。新しいフォームは古いフォームからすべてを継承しますが、新しいカスタムレイアウトを使用します。

このアプローチでは、コードの重複がないため、コードの重複を回避できます。

于 2008-11-26T23:35:13.050 に答える
5

Anchoring and Docking is the most common mechanism for handling different resolutions (remember also that many devices can rotate the screen, so you need to handle changes even on a single device). Getting screen size, if needed after that, is as simple as querying the Screen object:

int screenWidth = Screen.PrimaryScreen.Bounds.Width;
int workingHeight = Screen.PrimaryScreen.WorkingArea.Height;
于 2008-11-18T14:46:39.500 に答える
2

この質問に対する簡単な答えはありません。Windows では、最小の画面サイズでも通常 600 x 800 であるさまざまな画面解像度を処理するようにフォームを設計するのは簡単です。 640 x 480 (またはそれ以上)。これらのサイズ範囲では、アンカーとドッキングがうまく機能しない傾向があります。

1 つのオプションは、最小公倍数アプローチを使用して、可能な限り最小の画面に収まるようにすべてを設計することです。これはすべてのデバイスで動作することが保証されていますが、明らかに大きな画面では有効なスペースが無駄になります。

もう 1 つのオプションは、各フォームを解像度に対応するように設計することです。たとえば、データをグリッドに表示し、その上にフィルター コンボボックスを表示するフォームがある場合、フォームの Resize イベントにコードを記述して、グリッドのサイズを調整して利用可能なスペースを埋めることができます。

解像度を認識するコードの代替オプションは、特定の UI 機能の解像度ごとに個別のフォームを作成することです。もちろん、これはより多くの作業であり、コードの重複につながりますが、一部の特定の機能については、これを行う必要があるだけです。共通のロジックを抽象化する限り、問題ありません。

1 つのプロジェクトでこれを達成したいと考えるのは正しい考えです。さまざまな画面解像度は通常、少しの作業と思考で処理できますが、製品を別のプロジェクトに分割する理由にはなりません。

于 2008-11-21T04:31:14.687 に答える
2

このコードは、画面の解像度を動的に決定する際に機能しました。

[DllImport("coredll.dll", EntryPoint = ("GetSystemMetrics"))]
public static extern int GetSystemMetrics(int nIndex);

private const int SM_CXSCREEN = 0;
private const int SM_CYSCREEN = 1;

private int width = GetSystemMetrics(SM_CXSCREEN);
private int height = GetSystemMetrics(SM_CYSCREEN);

頭の中で覚えていませんが、画面の向きを取得する方法もあります。これらは、一部のコードを単一のクラスにマージするのに役立ちます。

すべての解像度に対して単一のソリューションを作成することを強くお勧めします。これらのソリューションでは、必要な数のプロジェクトを作成できます。これらのプロジェクトは、Windows フォーム アプリケーション、DLL ライブラリ プロジェクト、またはセットアップ プロジェクトです。

単一の Windows フォーム アプリケーション プロジェクトを作成することを目指しています。上記の手法を使用して、ファイル システムから静的イメージを読み取ります。これがうまくいかない場合や、画像をリソースとして読みたい場合は、すべての解像度に共通するすべてのコードを含む「エンジン」DLL プロジェクトを作成してください。このプロジェクトの出力を、必要な数の Windows フォーム アプリケーション プロジェクトへの参照として追加します。

于 2008-11-18T06:57:58.603 に答える
0

最も基本的なコンパクトなアプリケーションを除いて、私はデザイナーをあきらめました。画面の寸法を使用して、すべてのコントロールを数学的に配置しようとしています。痛いように聞こえますが、一度始めると、それは第二の性質になります。

すべてのフォームに対して、フォームが表示またはサイズ変更されるたびに起動される「再生成」メソッドを作成します。その方法では、通常、フォーム上の各コントロールの位置、サイズ、および必要に応じてフォント サイズを設定します。コントロールを配置するときの私の思考プロセスは次のとおりです。

  1. 通常のポートレート デバイスで問題ありませんか?
  2. 通常の横長のデバイスでよろしいですか?
  3. 正方形のデバイスでよろしいですか?
  4. VGA (640x480) (高 DPI) デバイスで問題ありませんか?

フォント サイズと高 DPI (Dots Per Inch) VGA デバイスの処理については、次のプロパティを使用します。

CurrentAutoScaleDimensions.Height / 96

...フォントスケーリング係数を生成します。(通常のデバイスは 96 DPI です)

最後の手段として、再生成コードで条件付き (if) ステートメントを使用して、さまざまな画面サイズ/形状をテストできます。

基本的なレイアウトにデザイナーを使用することは引き続き可能ですが、さまざまなエミュレーター/デバイスでフォームを実行し、縦向き/横向きを切り替えて「再生成」方法を完全にテストする必要があります。

于 2009-02-10T11:39:15.090 に答える