我試圖正確處理背景顏色在一個動態生成的屬性表在動態生成的屬性頁在win32 api中使用MFC(雖然我希望我的問題是一般的,並不限於MFC,但由於我的代碼和例子使用它,反正它與我的問題密切相關)。如何在屬性頁面中獲得正確的背景和控制顏色?
因此,我們有:
CPropertySheet
包含多個
CPropertyPage
我產生任何頁面的動態內容 - 使用自定義對話框定義語言的文件資源 - 所有無關緊要 - 在給定頁面內創建控件及其座標列表,並調整頁面大小以適應它們。這個邏輯運作得很好。
但是,不起作用的是每個頁面的控件和背景使用對話框的默認顏色/畫筆繪製。
我試過很多方法來試圖強制它使用白色/畫筆,硬編碼的屬性表/頁會。
有兩個重要的部分,以這樣的:
- 頁面背景
- 控制(頁)背景
#1,我已經試過:
- 從父窗口類獲取背景畫筆(它是對話框bkgrd)(如果我這樣做並要求選項卡控件,則也是如此)
- 變化的屬性頁(生成頁面即
PropertySheet::AddPage
當PreCreateWindow
不是由框架調用)
#2使用WS_EX_TRANSPARENT,我已經試過:
- 覆蓋
OnWndMsg
/WM_CTLCOLORSTATIC
將該請求轉發給(A)父級(工作表)和(B)到選項卡控件(這是首先要的是白色)。
但是,任何時候我使用上面的任何一個「請求背景/轉發請求」上鍊到表單或選項卡控件 - 我得到對話框背景顏色,從來沒有白色我會期望。
使用Spy64,我可以看到,對於一個完全硬編碼屬性表/頁 - 這是唯一可辨識的區別我可以看到的是,在AddPage
(或它的道德等價物)創建的對話窗口有WS_CHILD
代替礦具有WS_POPUP
(其餘的樣式看起來是相同的,例如WS_VISIBLE|DS_3DLOOK|DS_FIXEDSYS|DS_SETFONT|DS_CONTROL
和WS_EX_CONTROLPARENT
。
因此,除了WS_CHILD
之外,我看不出與我創建的內容以及從標準資源(即硬編碼)正常工作的另一個屬性表不同。
我也不知道這是怎麼回事 - 因爲轉發像ctrlcolor消息沒有正確響應 - 並要求窗口背景顏色類似沒有 - 那麼它是如何在一個標準的情況下控件和頁面的背景顏色以白色出現,而不是對話框背景?
任何意見或幫助將不勝感激 - 我有種運行的想法......
'WS_EX_TRANSPARENT'幾乎沒用,它所做的只是改變不同窗口的繪製順序。它實際上並沒有使任何透明。 –