2013-06-12 23 views
0

我有一個對話框,列表框,滑塊和一個按鈕。 我試圖改變背景顏色,但我無法設法改變這一點,所以我認爲,如果我添加一個「圖片控件」作爲一個位圖,並把它放在後臺我會成功,但現在的問題是, 「圖片控制」在所有控件之上。不能更改mfc控件的訂單

我試圖用Ctrl + d更改選項卡控件,但它沒有改變任何東西。 我也嘗試使用SetWindowPos頂部或按鈕,但它也沒有改變任何東西。

我注意到,如果我點擊按鈕的位置,它會被帶到我想要的前面。 有什麼辦法可以在開始時「點擊」所有的控件?我是否錯過了一些東西以便將控制權轉移到頂端?

+0

您確定您使用Ctrl-D管理了正確的順序嗎?您可以直接編輯.rc文件,以確保討厭的控件是列表中的第一個。 –

+0

我用ctrl + d試過很多選項,但沒有任何變化 – David

+0

我試圖直接編輯rc文件,它工作! Tnx :-) – David

回答

1

如果您需要更改對話框的背景顏色,您需要處理WM_CTLCOLORDLG message並將句柄返回到畫筆(如果畫筆不是庫存對象,請確保在對話框後刪除畫筆已關閉) - 或者,您可以處理WM_ERASEBKGND message並自行清除背景。

+0

我已經嘗試了2種方法,沒有發生任何事情。我更願意瞭解如何更改控件的順序 – David

+0

如果您想繼續處理控件的順序,我會推薦上面Balog Pal所說的:直接編輯.rc文件並將圖片控件作爲第一個控制對話框。 但是,我試圖在一個簡單的「關於」對話框中處理'WM_CTLCOLORDLG'消息,它確實有效! (關於Dlg :: IDD)\t {\t m_hbrBackground = CreateSolidBrush(RGB(255,0,0)); \t}' 'CAboutDlg ::〜CAboutDlg()\t {\t DeleteObject(m_hbrBackground); \t}' 在WindowProc中: '如果(消息== WM_CTLCOLORDLG)回報(LRESULT)m_hbrBackground;' –

+0

上[改變控制的Tab鍵順序(MSDN文章http://msdn.microsoft.com/en- us/library/csz6b8x8.aspx) –

0

我試圖用Ctrl + D改變標籤控件,但它沒有改變任何東西。我也嘗試使用SetWindowPos頂部或按鈕,但它也沒有改變任何東西。

按Ctrl + d不會讓你在重新排序模式,但有檢查的更可靠的方式。對話框模板以.RC文件形式顯示在文本中,您可以按照自己的意願手動查看使用文本編輯器進行控制的順序和排序行。這將是控件創建和製表順序的順序。有時用這種方式重新排序控制就更容易了。

更重要的是,當您的應用程序正在運行時,Spy ++ SDK工具可以枚舉窗口,並且它會爲您提供窗口順序以供檢查。

SetWindowPos具有適當的參數也會更改運行時控件的Z順序。