分享方式:


動態版面配置

在 Visual Studio 2015 中使用 MFC 時,您可以建立使用者可以調整大小的對話方塊,並控制版面配置調整大小變更的方式。 例如,您可以將對話方塊底部的按鈕附加至下邊緣,使其永遠保持在底部。 您也可以設定特定的控制項,例如清單方塊、編輯方塊和文字欄位,在使用者展開對話方塊時展開。

指定 MFC 對話方塊的動態配置設定

當使用者調整對話方塊時,對話方塊中的控制項可以調整大小,或以 X 和 Y 方向移動。 在使用者調整對話方塊大小時,控制項大小或位置的變更即稱為動態配置。 例如,下列是調整大小之前的對話方塊:

Dialog before being resized.

調整大小之後,清單方塊區域會加大以顯示更多的項目,按鈕則會隨右下角移動:

Dialog after being resized.

您可以指定 IDE 中資源編輯器中每個控制項的詳細資料,也可以透過程式設計方式存取 CMFCDynamicLayout 特定控制項的物件並設定屬性,來控制動態配置。

在資源編輯器中設定動態配置屬性

您可以使用資源編輯器設定對話方塊的動態配置行為,而不需要撰寫任何程式碼。

在資源編輯器中設定動態配置屬性

  1. 在 MFC 專案開啟的狀態下,於對話方塊編輯器中開啟您想要使用的對話方塊。

    Open the dialog in the resource editor.

  2. 選取控制項,然後在 [屬性 ] 視窗中(在 [類別檢視 ] 中 設定其動態版面配置屬性。 [ 屬性 ] 視窗中的 [動態配置 ] 區段包含 [移動類型]、 [大小大小類型 ] 屬性 ,以及根據為這些屬性選取的值而定,定義控制項移動或變更大小的特定屬性。 移動類型 會決定控制項在對話方塊大小變更時移動的方式; 調整大小類型 會決定當對話方塊的大小變更時,控制項的大小調整的方式。 根據您想要動態變更的維度,移動類型和 調整大小類型 可以是 水準 垂直 、兩者 。 水平是 X 維度 ;垂直是 Y 方向。

  3. 如果您希望按鈕之類的控制項位於固定大小,並停留在右下方,如同 [確定] 或 [取消 ] 按鈕的 常見方式,請將 [調整大小類型] 設定為 [無 ],並將 [移動類型 ] 設定 [兩者]。 針對 [移動類型 ] 底下的 [移動 X ] 和 [移動 Y ] 值,設定 100% 以讓控制項與右下角保持固定距離。

    Dynamic Layout.

  4. 假設您也有想要在對話方塊展開時加以展開的控制項。 一般而言,使用者可能會展開對話方塊,以展開多行編輯方塊,增加文字區域的大小,或者可能會展開清單控制項以查看詳細資料。 在此情況下,請將 [ 調整大小類型 ] 設定為 [兩者],並將 [ 移動類型 ] 設定為 [無]。 然後,將 [調整大小 X ] 和 [調整大小 Y ] 值設定為 100。

    Dynamic Layout Settings.

  5. 實驗其他可能對您的控制項有意義的值。 例如,具有單行文字方塊的對話方塊可能會將 [調整大小類型 ] 設定為 [水準 ]。

以程式設計方式設定動態配置屬性

上一個程序可用於在設計階段指定對話方塊的動態配置屬性,但如果您想要在執行階段控制動態配置,可以透過程式設計方式設定動態配置屬性。

以程式設計方式設定動態配置屬性

  1. 在對話方塊類別的實作程式碼中,尋找或建立一個您要為對話指定動態配置的位置。 例如,您可能會想要在對話方塊中加入 AdjustLayout 這樣的方法,並從需要變更配置的位置呼叫它。 您可能會先從建構函式呼叫它,或在變更對話方塊後呼叫。

  2. 針對對話方塊,呼叫 類別的 CWnd GetDynamicLayout 方法。 GetDynamicLayout 傳回 CMFCDynamicLayout 物件的指標。

    CMFCDynamicLayout* dynamicLayout = pDialog->GetDynamicLayout();
    
  3. 針對您要新增動態行為的第一個控制項,請使用動態版面配置類別上的靜態方法來建立 Move設定 結構,以編碼控制項應該調整的方式。 您必須先選擇適當的靜態方法: CMFCDynamicLayout::MoveHorizontal CMFCDynamicLayout::MoveVertical CMFCDynamicLayout::MoveNone CMFCDynamicLayout::MoveHorizontalAndVertical 。 傳入移動之水平和/或垂直層面的百分比。 這些靜態方法全都會傳回新建立的 MoveSettings 物件,可讓您指定控制項的移動行為。

    請記住,100 表示移動的量與對話方塊變更大小的量剛好相等,這會使控制項的邊緣與新框線保持固定距離。

    MoveSettings moveSettings = CMFCDynamicLayout::MoveHorizontal(100);
    
  4. 對大小行為執行相同動作,這會使用 Size設定 類型。 例如,若要指定控制項在重新調整對話方塊大小時不會變更大小,請使用下列程式碼:

    SizeSettings sizeSettings = CMFCDynamicLayout::SizeNone();
    
  5. 使用 CMFCDynamicLayout::AddItem 方法,將控制項新增至動態版面建構管理員。 指定想要之控制項的不同方式有兩個多載。 一個採用控制項的視窗控制代碼 (HWND),另一個採用控制項 ID。

    dynamicLayout->AddItem(hWndControl,
    moveSettings,
    sizeSettings);
    
  6. 針對每個需要移動或調整大小的控制項重複進行。

  7. 如有必要,可以使用 CMFCDynamicLayout::HasItem 方法來判斷控制項是否已在受動態版面配置變更的控制項清單中,或 CMFCDynamicLayout::IsEmpty 方法來判斷是否有任何控制項受限於變更。

  8. 若要啟用對話方塊配置,請呼叫 CWnd::EnableDynamicLayout 方法。

    pDialog->EnableDynamicLayout(TRUE);
    
  9. 下次使用者調整對話方塊大小時, 會呼叫 CMFCDynamicLayout::Adjust 方法,以實際套用設定。

  10. 如果您想要停用動態配置,請使用 FALSE 呼叫 CWnd::EnableDynamicLayout 作為 bEnabled 參數。

    pDialog->EnableDynamicLayout(FALSE);
    

從資源檔以程式設計方式設定動態配置

  1. 使用 CMFCDynamicLayout::MoveHorizontalAndVertical 方法,在指定動態配置資訊的相關資源腳本檔 (.rc 檔案) 中指定資源名稱,如下列範例所示:

    dynamicLayout->LoadResource("IDD_DIALOG1");
    

    具名資源必須參考對話方塊,其中包含資源檔中AFX_DIALOG_LAYOUT 專案形式的 版面配置資訊,如下列範例所示:

    /////////////////////////////////////////////////////////////////////////////
    //
    // AFX_DIALOG_LAYOUT
    //
    
    IDD_MFCAPPLICATION1_DIALOG AFX_DIALOG_LAYOUT
    BEGIN
    0x0000,
    0x6400,
    0x0028,
    0x643c,
    0x0028
    END
    
    IDD_DIALOG1 AFX_DIALOG_LAYOUT
    BEGIN
    0x0000,
    0x6464,
    0x0000,
    0x6464,
    0x0000,
    0x0000,
    0x6464,
    0x0000,
    0x0000
    
    END
    

另請參閱

CMFCDynamicLayout 類別
控制項類別
對話方塊類別
對話方塊編輯器
Visual C++ 2015 中 MFC 的動態對話方塊配置