4

WTL の知識が豊富な人が次のようなものを作成する方法を知りたいです。

2 つの「領域」を含む、サイズ変更可能な (-> WS_THICKFRAME) ダイアログ。1 つの領域は、サイズ変更時に y 方向に拡大し、互いに等高さの間隔 (たとえば、領域の高さの 0%、25%、50%、75%、および 100%) で配置する必要があるいくつかのコンポーネントを含みます。

他の領域は下にあり、高さが固定されています。サイズを変更すると、両方の領域が x 方向に拡大するはずです。

ここでの重要な質問は次のとおりです。a) これらの 2 つの領域に使用するコンテナーなど b) サイズ変更の処理方法 (DLGRESIZE_CONTROL では、コントロールを等間隔に配置することはできません。たとえば、afaik)

ありがとう。

4

2 に答える 2

2

CDialogResizeこれにはクラスを使用できます。ウィンドウのクラス定義でこのクラスを継承し、ウィンドウの更新時に各コントロールのサイズを変更する方法を定義するだけです。これらはカスケードにサイズ変更されるため、 も実装する 1 つの方法でサイズ変更されるウィンドウを持つことができますCDialogResize

class CFooWindow : ... public CDialogResize<CFooWindow> {

    BEGIN_MSG_MAP(CFooWindow)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        ... more messages here
        CHAIN_MSG_MAP(CDialogResize<CFooWindow>)
    END_MSG_MAP()

    // This map defines how the controls within the window are resized.
    // You can also use DLGRESIZE_GROUP() to group controls together.
    BEGIN_DLGRESIZE_MAP(CFooWindow)
       DLGRESIZE_CONTROL(IDC_WINDOW_TOP,    DLSZ_SZIZE_X | DLSZ_SIZE_Y);
       DLGRESIZE_CONTROL(IDC_WINDOW_BOTTOM, DLSZ_SZIZE_X | DLSZ_MOVE_Y);
    END_DLGRESIZE_MAP()


    LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {

       DlgResize_Init();
    }
      .. the rest of your class here
}

DLGRESIZE_GROUP()最終的なレイアウトでコントロールを分離したいので、リソース ファイルでコントロールを分離することにより、コントロール間のギャップを実装できます。その後、アイテムのサイズが更新されます。複雑すぎるものが必要な場合は、ダイアログのサイズ変更コールバックを使用して、項目の正確な配置を制御できます。クラスに実装CDlgResize::OnSize(UINT nType, int cx, int cy)し、コントロールのサイズを手動で更新するだけです。

于 2012-09-27T00:56:12.063 に答える
0

これはスプリッターで行うことができます。ここに素晴らしいチュートリアルがあります: http://www.codeproject.com/KB/wtl/wtl4mfc7.aspx

SPLIT_BOTTOMALIGNED を拡張スタイルとして設定して、上部ペインのみのサイズを変更できます (下部ペインはサイズ変更されません)。

于 2011-05-24T06:29:06.673 に答える