2012-12-25 37 views
1

我想爲應用程序的更改設置創建一個對話框窗口。以下是Adobe Reader的屏幕截圖。在使用Spy ++之後,我猜想:將對話項目分組到單個「組」(Visual Studio)

在右側,所有控件(按鈕,組合框...等等)都屬於GroupBox。

對於左側的TreeView控件中的每個類別,都有一個相應的GroupBox,它將與此類別相關的所有控件分組。

當用戶選擇不同的類別時,它隱藏一個GroupBox並顯示另一個GroupBox。

但是在下面的源代碼(xxx.rc,資源文件)中,我沒有看到任何可以指定對話項的「父」的地方。

即使我打開「資源視圖」(不作爲代碼)查看xxx.rc,我找不到任何選項來指定其屬性頁中的對話框項目的父項。

我想知道如何在一個對話框項目中分配一個父組件(這是一個GroupBox),或者在.rc文件中將對話框項目分組到一個組中,也就是當創建對話框項目時。 (我想我們可以通過修改rc文件這樣做。)

GROUPBOX  "View",IDC_SECTION_VIEW,101,6,228,88 
LTEXT   "Default &Layout:",IDC_DEFAULT_LAYOUT_LABEL,107,19,108,9 
COMBOBOX  IDC_DEFAULT_LAYOUT,215,17,108,64,CBS_DROPDOWNLIST | WS_TABSTOP 
LTEXT   "Default &Zoom:",IDC_DEFAULT_ZOOM_LABEL,107,36,108,9 
COMBOBOX  IDC_DEFAULT_ZOOM,215,34,108,149,CBS_DROPDOWN | WS_TABSTOP 
CONTROL   "Show the &bookmarks sidebar when available",IDC_DEFAULT_SHOW_TOC, 
       "Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,53,216,9 
... 
... 
... 

enter image description here

+0

組框不組控制。它們僅僅是傳達對話設計者意圖的視覺輔助。它是控制箭頭鍵導航的'WS_GROUP'窗口樣式,[Tab]鍵導航是'WS_TABSTOP'。既然你的假設是錯誤的,那麼你的解決方案就是基於這個假設。事實上,我仍然不明白你真正想做什麼。如果你沒有解釋你提出的解決方案,你描述了你的最終目標將會有幫助 – IInspectable

回答

2

我想知道如何分配父...

SetParent的Windows API。你提供你的控制的HWND和假定的新父母的句柄。

在資源腳本中,控件將是對話框本身的子對象,但是在運行時您可以自由更改並將它們分組爲您感興趣的層次結構。

您可能還想考慮將假定的子組放入單獨的對話框模板中,並將其作爲「組合控件」 - 分別實例化併成爲更高級別對話框的子項。

UPD。看看這個簡單的項目(C++/ATL):AtlChildDialog。特別是,at main dialog's WM_INITIDIALOG handler

ATLVERIFY(m_ChildDialog.Create(m_hWnd, (LPARAM) this)); 
ATLVERIFY(m_ChildDialog.MoveWindow(50, 50, 200, 150)); 
m_ChildDialog.m_EditWindow.SetWindowText(_T("Some Text")); 
m_ChildDialog.ShowWindow(SW_SHOWNORMAL); 
m_ChildDialog.SetFocus(); 

IDD_MAIN

IDD_CHILD

所有一起運行時:

Run Time

+0

是的,我知道這個解決方案。但是這不是在.rc文件中,而是在另一個.cpp文件中。我只是想知道在.rc文件中創建對話框項目時是否可以這樣做。我編輯我的問題來指定這一點,但謝謝。 – user565739

+0

好的,謝謝你讓我知道一個不能在.rc文件中指定一個對話框項目的父項。 – user565739

+0

'.RC'控件的父項將成爲對話框,您無法靈活地重寫此項。您可以在運行時重新控制父控件,並且可以設計單獨的模板並在運行時將它們「合併」爲層次結構。 –