2011-05-23 51 views
3

WTL佈局我想知道人們是如何用更WTL知識將創造這樣的事情:與調整

對話框是可調整大小( - > WS_THICKFRAME),其中包含兩個「區」。當調整大小時,一個區域在y方向上生長,並且包含應該彼此之間具有相等高度距離(例如,在區域高度的0%,25%,50%,75%和100%)間隔開的幾個組件。

其他地區在下面,有固定的高度。調整大小時,這兩個區域應該在x方向上增長。

這裏最重要的問題是: 一)使用什麼容器等,爲這兩個領域 二)如何處理調整(DLGRESIZE_CONTROL不允許間距相等的距離,例如控制,據我所知)

謝謝。

+0

您可能從MFC的這個答案中得到一些見解:http://stackoverflow.com/questions/138040/how-to-create-a-resizable-cdialog-in-mfc/5739620#5739620 – 2011-05-23 20:00:35

+0

這有點幫助,是的。仍然想知道如何處理區域/容器。 – xnor 2011-05-23 20:20:51

+0

我發佈的代碼不會做容器,您需要單獨處理每個控件。但是你的佈局看起來並不難,上層控件按照你所說的完全移動了0%,25%等,而底層部分總是移動100%。 – 2011-05-23 20:30:04

回答

1

您可以使用CDialogResize類。只需繼承此類中的類 定義您的窗口,並定義每個控件在更新窗口 時應調整的方式。這些調整級聯的大小,所以你可以有一個窗口,以一種方式調整大小,這也實現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)並手動更新控件的大小。

+0

需要更多然後看[這裏](http://www.codeproject.com/Articles/1214/Using-WTL-s-Built-in-Dialog-Resizing-Class) – 2014-10-15 17:01:38