2011-04-06 69 views
4

我的應用程序有一個啓動對話框,其中包含填充整個對話框的圖像。另外還有一個CStatic控件,它爲用戶顯示一些可變信息。我做了靜態控件控制透明與下面的代碼:如何使CStatic控件(MFC)透明?

HBRUSH CStartbildDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
    if(pWnd->GetDlgCtrlID() == IDC_STATIC_INFO) 
    { 
     pDC->SetBkMode(TRANSPARENT); 
     return reinterpret_cast<HBRUSH>(::GetStockObject(NULL_BRUSH)); 
    } 
    else 
     return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
} 

當我改變靜態控件的文本與GetDlgItem(IDC_STATIC_INFO)->SetWindowText,新的文本重疊的舊文本(舊文本不會被刪除)。我試圖重新調用SetWindowText圖像0​​的背景,但沒有顯示任何信息文本(既不是舊的也不是新的)。

你知道我怎樣才能使靜態控制透明,以便我也可以用新文本覆蓋它嗎?

感謝您的幫助!

解決方案: 方法2(改編)來自Sanja的codeproject-link爲我工作。

GetDlgItem(IDC_STATIC_INFO)->SetWindowText(tmp); 
CRect rect; 
GetDlgItem(IDC_STATIC_INFO)->GetWindowRect(&rect); 
ScreenToClient(&rect); 
InvalidateRect(&rect); 
UpdateWindow(); 
+0

[在WINAPI中執行透明按鈕的正確方法]的可能重複方法2效果很好(http://stackoverflow.com/questions/4595618/correct-way-to-do-transparent-buttons-in-winapi) – 2011-04-06 11:24:49

回答

3

嗨,你可以找到透明的靜態樣品here

+0

方法2運行良好, 謝謝。 – 2011-04-06 12:09:25

+0

@Christian Ammer沒問題,請問 – 2011-04-06 12:20:01

0

這個答案是有關Windows的API,而不是MFC框架,但其概念翻譯easilly:

Correct way to do transparent buttons in WINAPI

你的問題是使用Win32本地控件實現透明控件與重新繪製時實現無閃爍控件衝突。