2011-04-06 70 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本地控件实现透明控件与重新绘制时实现无闪烁控件冲突。