2

私のアプリケーションでは、積み重ねられたダイアログを使用して、いくつかの場所でオプションを選択しています。たとえば、次のダイアログ ボックスでは、2 つの重ねられたダイアログが使用されています。

  1. 「撮影方法」を選択するには、ユーザーは右下のドロップダウン リストから選択します。これにより、その上の子ダイアログ ボックスが変更されます。
  2. 「高度なオプション」ボックス (子ダイアログ ボックスにあります) は、単純化されたインターフェイスとより完全なインターフェイスのどちらかを選択します。

正しいダイアログ

いずれの場合も、スタック ダイアログ ボックスは、親ダイアログのプレースホルダーとして画像オブジェクトを使用して実装されます。ページが選択されると、SetWindowPos が呼び出され、プレースホルダーに合わせて子ダイアログ (pNewPage) を移動/サイズ変更します。

// Show the newly selected page
pNewPage->ShowWindow (SW_SHOW) ;
pNewPage->SetFocus () ;

// Position the newly selected page
CRect rcDlgArea ;
GetDlgItem (IDC_DLG_AREA)->GetWindowRect (&rcDlgArea) ;
ScreenToClient (&rcDlgArea) ;

pNewPage->SetWindowPos (this, 
    rcDlgArea.left, rcDlgArea.top, rcDlgArea.Width (), rcDlgArea.Height (), 
    SWP_NOACTIVATE) ;

これは今まで非常にうまく機能していましたが、ドイツのユーザーの 1 人が説明できない問題を抱えています。彼がツールを開くと、積み上げられたページが次のように表示されます。

間違ったダイアログ

子ダイアログのテキストが親のテキストよりも大きく表示されるように、子ダイアログが引き伸ばされることに注意してください。

視覚的なレイアウトの問題以外に、子ダイアログは、右下の選択ドロップダウン (親ダイアログにあります) を「覆っている」ようにも見えます。ドロップダウンは引き続き表示されますが、ドロップダウン リストをクリックしても CBN_SELCHANGE メッセージは受信されません。

子ダイアログ ボックスのサイズが変更されている理由を説明できません。上記のように、ダイアログ ボックスのサイズ変更について非常に明確にしようとしましたが、うまくいかないようです。

子ダイアログが一部のシステムで再スケーリングされ、他のシステムでは再スケーリングされない理由を考えられる人はいますか? どんな助けでも大歓迎です。

ありがとうございました、

マイケル

4

1 に答える 1

1

このユーザーは、最初のスクリーンショットで使用されているものよりも大きなフォントを選択しているようです。ダイアログのサイズは DLU で指定されていることに注意してください。これは、ユーザーがフォントに選択したサイズに合わせて調整されます。ダイアログをピクセル単位で明示的にスケーリングするか (悪い解決策です。一部の構成ではアプリの外観がさらに悪くなります)、どこでも DLU で計算を行うことができます。2 番目のスクリーンショットは、子ダイアログがウィザードのフォントとは異なるフォントを使用していることも示しているようです。理由はわかりませんが、作成時にウィザードに渡すウィンドウ スタイルにあると思います。

于 2012-06-06T12:25:08.987 に答える