2008-10-01 33 views
13

如何在設計時更改控件的MFC中的Z-order - 即我無法使用SetWindowPos或在運行時執行此操作 - 我想查看更改後的z (即使我不得不求助於直接編輯.rc代碼)。如何將控件帶到mfc中

我有一個MFC對話框,我添加了控件。如果控件的邊緣之間有重疊,我想把一個放在另一個的前面。在Windows窗體或WPF等,我可以帶到前面,發回,推進,回傳。我在MFC中沒有找到這些選項,也不能說明它是如何確定前面的內容的,因爲剛剛添加的控件通常位於之前的控件背後。我如何操縱MFC中的Z順序?即使我必須直接操作.rc文件代碼(即在設計器周圍運行)。

回答

14

我認爲前面的控件將是rc文件中發生的最後一個控件。換句話說,對話框編輯器會在rc文件中從上到下繪製每個控件,並在需要時重疊它們。

您可以編輯rc文件以對它們重新排序,也可以在編輯器中更改Tab鍵順序,它也執行相同的操作,因爲Tab順序也是根據文件中控件的順序設置的。據我所知,MFC在設計時並沒有提供任何其他的分層重疊控件的方法。

10
GetDlgItem(IDC_MYCONTROL)->SetWindowPos(HWND_TOP, 
             0, 0, 0, 0, 
             SWP_NOMOVE | SWP_NOSIZE); 
+2

問題指定「在設計時」*不是*在運行時。 – 2013-07-09 16:22:22

+0

(編輯:MFC-Edit-Browse-Control是我的解決方案),,,,,謝謝,戈納必須手動對抗這場戰鬥。繪製+點擊+重點事件強制他們自己的訂單,我不能依靠tab鍵順序。 EX:CEdit上的按鈕。該按鈕需要在編輯框之前,否則點擊即可編輯。然而,點擊進入編輯將導致它無論順序如何在按鈕的頂部繪製。 – diox8tony 2018-02-02 00:41:39

1

您可以使用CWnd::SetWindowPos()來控制您的控件的Z順序,而無需更改它們在父窗口中的位置。

6

實際上,如果你想在資源編輯器中做到這一點,你可以剪切該項目,然後將其粘貼回來,作爲一個快速而骯髒的解決方案。只需按Ctrl-X然後按Ctrl-V。

編輯RC文件也可以。

+0

這節省了一天。我有一個未使用的文本框,我想刪除隱藏的地方,並找不到它在設計師視圖** **半小時**。所以我從屬性中選擇它,點擊設計器視圖,`ctrl-x`,`ctrl-v`,(有些詛咒),`del`。 – Sharky 2014-09-19 12:06:50

0

MSVC 2005對話框資源編輯器中有一個選項來設置標籤順序。在MSVC 2005它在格式,Tab Order菜單上找到。

此菜單選項顯示的Tab鍵順序與將控件寫入資源文件的順序相同。

17

在Visual Studio 6.0中,執行以下操作。

打開對話界面(在設計視圖)

按Ctrl + d

選項卡訂單會顯示每個控制

開始在你期望看到的標籤順序點擊控制來在運行時(即,您首先點擊的控件將tab選項設置爲1等等......)

1
GetDlgItem(IDC_CONTROL1)->SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE)