2

GDI /GDI+ を使用して GUI を描画する方法を学んで います。すべてのアプリケーションがその計算を行うため、適切に表示できるようになりますか?

ウィンドウ上のボタン、画像、およびすべてのコントロールのクライアント座標を計算して、異なる解像度で同じ位置に配置する方法を誰かが説明できますか?

前もって感謝します。

4

2 に答える 2

3

GDI では、GetDeviceCaps関数とLOGPIXELSXを使用LOGPIXELSYして DPI を検索し、これらの値を使用してサイズをスケーリングできます。

HDC hdc = GetDC(hwnd);
int ppix = GetDeviceCaps(hdc, LOGPIXELSX);
int ppiy = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(hdc);

// for a control that is 1.5 inches wide and 0.5 inches high.

int ctrl_width = int(1.5 * ppix + 0.5);
int ctrl_height = int(0.5 * ppiy + 0.5);

// for a button that conforms to Microsoft's UI guidelines of 75x23 @ 96dpi.

int btn_width = (75 * ppix + 48) / 96;
int btn_height = (23 * ppiy + 48) / 96;

GDI+ はこれをかなり簡単にします:

Graphics g;
g.SetPageUnit(UnitInch);

// now you can specify draw coordinates in inches
// and it'll figure out DPI for you.

GDI+ ソリューションは、GDI 呼び出しやコントロールの座標ではなく、GDI+ 描画呼び出しにのみ影響することに注意してください。

于 2012-06-16T19:26:53.840 に答える
2

dpi 認識を無視すると、すぐに苦痛になり始めます。ディスプレイ技術は非常に長い間 96 dpi にとどまっており、すでに 20 年も経過しています。自動 dpi スケーリングと非常にアクセスしやすい「定規」アプレットを備えた Vista は、ゲーム チェンジャーでした。「Retina」ディスプレイを推進している Apple が、真の推進力です。次の Apple MacBook には 2880 x 1800 のディスプレイが搭載されています。通常の 1024 x 768 のウィンドウは、そのようなディスプレイでは郵便切手になります。

自動化するためのツールはすぐに利用でき、XAML ベースのクラス ライブラリ (WPF、Silverlight、Metro) は完全に解像度に依存しません。HTML と Winforms の自動スケーリングはかなりうまくいきます。もちろん、GDI の助けにはなりません。そして、User32 にはまったく何もなく、ピクセルランドにしっかりと立ち往生しています。あなたは確かにコードを書くことができますが、それは書くのが楽しいコードではありません. 従来の理由で生の API をまだプログラミングしている場合は、Vista 以降に組み込まれている自動スケーリングが魅力的です。まあ、努力を減らすために、それはあまり魅力的に見えません:)

于 2012-06-16T20:08:58.267 に答える