我正在嘗試製作一個應用程序,該應用程序的大部分開發都是在Visual C++ 6.0中完成的,並堅持使用Windows主題,或者確切地說它是視覺樣式方面。有問題的應用程序是具有MBCS字符集的MFC應用程序。首先獲得主音需要將InitCommonControlsEx(...);
技巧與適用於Common Controls 6.0的清單結合在一起。迄今爲止沒有特別的。使用清單導致窗口保持部分空白
所有這一切,我有大量的窗口有一些畫圖故障的表現 - 在背景上的白色矩形,以前像在窗口的其餘部分一樣是灰色的,但它們不會妨礙。
最大的麻煩製造者是CDialog
後代,它實現了一個(古老的)'你知道......'提示對話框。除非按鈕,複選框和裝飾框在清單到位的時刻拒絕繪製其他任何東西。但是,如果我將OUT顯示出來,一切正常。
Comparison images right after invoking the dialog
我已經通過OnPaint
代碼階梯(其中繪製圖標和「你知道嗎?」的文字,並且所有的函數返回明智和成功的價值。我也試圖消除整個customdrawn位(評論出映射爲WM_PAINT
和WM_CTLCOLOR
消息),但即使這造成沒有顯示或行爲對於這個問題不同。
當我點擊「下一提示」按鈕,它將正確繪製的下一個提示但是,帶有燈泡圖標的customdrawn標題仍然不正確唱。
該代碼真的沒有什麼特別的,我可以發現,而且我很茫然。因爲我懷疑對話定義是最有幫助的,所以我會將其包含在內,儘管如果人們對問題隱藏的位置有了解,我可以發佈其他內容。
IDD_TIP DIALOG DISCARDABLE 0, 0, 231, 164
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Tip of the Day"
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME,12,11,207,123
LTEXT "Some String",IDC_TIPSTRING,28,63,177,60
CONTROL "&Show Tips on StartUp",IDC_STARTUP,"Button",
BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,13,146,85,10
PUSHBUTTON "&Next Tip",IDC_NEXTTIP,109,143,50,14,WS_GROUP
DEFPUSHBUTTON "&Close",IDOK,168,143,50,14,WS_GROUP
CONTROL "",IDC_BULB,"Static",SS_BITMAP,20,17,190,111
END
我正在測試的機器是運行VS2010的W7 64位機器。有問題的應用程序本身是32位的。
編輯:
新的一天提供了新的見解。不知何故,問題是處理WM_CTLCOLOR
消息。當我將其設置爲返回NULL_BRUSH
時,我終於看到了正在繪製的東西(在初始繪製後當然會模糊不清)。更進一步地說,它似乎是當nCtlColor == CTLCOLOR_STATIC
,如果我返回一個NULL_BRUSH
,東西會顯示。然而,當我將它變成WHITE_BRUSH
時,再也沒有任何東西能夠被吸引。
原始代碼:
HBRUSH CTipDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { if (pWnd->GetDlgCtrlID() == IDC_TIPSTRING) return (HBRUSH)GetStockObject(WHITE_BRUSH); else if (nCtlColor == CTLCOLOR_STATIC) /* Visual styles enabled causes the things we draw in our WM_PAINT * to get cleared (and not redrawn) if we do not use a hollow brush here. * Likely the default behaviour differs when using theming. */ return (HBRUSH)GetStockObject(HOLLOW_BRUSH); return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); }
問題解決了!大膽的線條是我爲解決問題而改變的,包括強制性評論。 :)
我知道的Unicode <-> MBCS問題,我開始之前。然而,我理解它的方式是關於字符集會出現怪癖;特別是Raymond在他的博客文章中指出的編輯控制。轉換爲Unicode可能是東西掉在地平線上,但現在我有點不相信有詭詐這個平凡的對話,因爲所有的輸入/輸出,此時留在ASCII範圍。我有與時髦的繪圖東西_far_更復雜的窗戶,工作得很好。 – Stigma 2010-09-24 09:20:47
既然你是唯一的答案,並且它是一個有用的答案(儘管沒有回答或解決我的問題的根源),我會接受你的答案。感謝您抽出時間回覆。 :) – Stigma 2010-09-24 12:27:07