2014-11-06 18 views
1

我正在創建一個帶有標籤控件的對話框。每個標籤都應該顯示不同的控件集合,因此我在資源編輯器中創建了子對話框,其行爲與頁面類似。作爲標籤頁的對話框從它所屬的標籤控件具有不同的背景顏色

我已經使用this的指示來完成此操作。

在資源編輯器,我做的對話框無邊框,設置它們的樣式Child,刪除系統菜單,我已經設置標誌ControlControl Parenttrue

在我的子對話框程序中,我通過添加EnableThemeDialgTexture(handleOfmyDialog, ETDT_ENABLETAB);和返回TRUE來處理WM_INITDIALOG。沒有WM_ERASEBKGNDWM_PAINTWM_CTLCOLORDLG已被覆蓋。

在包含選項卡控件的主對話框中,我創建了具有CreateDialog函數的「子對話框」,並使用MoveWindow來正確定位它們。

我沒有使用EndDialog銷燬IDCANCELWM_CLOSE上的「子對話框」,我認爲它們會自動銷燬。

我已經在Windows 8.1上使用Visual Studio 2013來完成所有這些工作。

在Windows 7和Windows 8.1上似乎沒有問題,但也許我的眼睛正在跟我玩耍,因爲選項卡控件的背景顏色與對話框的默認背景顏色類似。這個問題最好是在Windows XP上看到,下面的圖片,如圖所示:

enter image description here

我怎樣才能讓「子窗口」(等複選框/跟蹤條/單選按鈕/靜子控件的背景顏色控制)是透明的(匹配選項卡控件的背景顏色)?

謝謝。

+0

您是否嘗試爲子對話調用'EnableThemeDialogTexture'?我不確定它是否支持子對話框,但如果您尚未嘗試,則值得嘗試。 – 2014-11-06 23:14:27

+0

@JonathanPotter:我在'WM_INITDIALOG'的每個子對話框過程中調用了'EnableThemeDialogTexture'。除了使用CreateDialog創建子對話框外,我沒有在主對話框的WM_INITDIALOG中做任何事情。 – AlwaysLearningNewStuff 2014-11-07 00:32:35

+0

在這種情況下,我會說它不支持兒童(即兒童的孩子)。一種選擇是將對話框子類化並使用主題中的選項卡部分執行自己的背景渲染。 – 2014-11-07 01:08:35

回答

2

這是一個非常簡單的問題。您無法在稍後的Windows版本上看到錯誤,因爲它們不再爲「紋理」使用漸變。 EnableThemeDialogTexture()工作得很好,你的對話框肯定與你的tabcontrol具有相同的紋理。畫筆原點從對話框的左上角開始。就像它爲tabcontrol一樣。但是對話框定位不正確,現在漸變不對齊,對話框不再混合。

您需要移動對話框,使其正確位於標籤頁區域內。的代碼從MSDN article相關線:

// Size the dialog box. 
SetWindowPos(hwndDlg, NULL, 
    0, 0,               // <=== here! 
    rcTab.right + cyMargin + (2 * GetSystemMetrics(SM_CXDLGFRAME)), 
    rcTab.bottom + rcButton.bottom + (2 * cyMargin) 
    + (2 * GetSystemMetrics(SM_CYDLGFRAME)) 
    + GetSystemMetrics(SM_CYCAPTION), 
    SWP_NOMOVE | SWP_NOZORDER); 

位於(0,0)在的TabControl的客戶區,現在梯度對準。

+0

我已經重新閱讀了您的鏈接MSDN文章,並且遇到問題。該代碼調整對話框的大小以適應選項卡控件的整個客戶區域,然後在選項卡選擇更改時銷燬該對話框,從而創建另一個相應的子對話框。然後再次將該新對話框調整到該選項卡的客戶區。我的問題是**所有子對話框必須存在**,並且只能同時隱藏/顯示。因此我不知道如何應用你的代碼片段來解決這個問題。你能提出一個解決方案嗎?謝謝。 – AlwaysLearningNewStuff 2014-11-08 23:35:58

+0

此問題與創建對話框完全無關。就在你放他們的地方。 – 2014-11-08 23:40:49

+0

不幸的是,[它似乎事情並不那麼容易......](http://stackoverflow.com/questions/27085427/common-controls-are-not-properly-painted-when-i-resize-window) – AlwaysLearningNewStuff 2014-11-28 08:51:37