我把一个子CStatic做了透明:
BRUSH CUpdateUIDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC here
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(0);
pDC->SetTextColor(RGB(128,128,128));
hbr = (HBRUSH)::GetStockObject(NULL_BRUSH);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}然后我在下载文件更新文件进度.然后要更新CStatic的text.如果不用RedrawWindow时对窗口进行重绘.字体就会冲突,可刷新过快时有闪烁.
void UpdateStatic(char* buff)
{
RECT m_rect;
::GetWindowRect(GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),&m_rect);
ScreenToClient(&m_rect);
GetDlgItem(IDC_STATIC1)->SetWindowText(buff);
(GetDlgItem(IDC_STATIC1)->GetParent())->RedrawWindow(&m_rect,0,RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE);
}大家有没有好的办法?
BRUSH CUpdateUIDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC here
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(0);
pDC->SetTextColor(RGB(128,128,128));
hbr = (HBRUSH)::GetStockObject(NULL_BRUSH);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}然后我在下载文件更新文件进度.然后要更新CStatic的text.如果不用RedrawWindow时对窗口进行重绘.字体就会冲突,可刷新过快时有闪烁.
void UpdateStatic(char* buff)
{
RECT m_rect;
::GetWindowRect(GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),&m_rect);
ScreenToClient(&m_rect);
GetDlgItem(IDC_STATIC1)->SetWindowText(buff);
(GetDlgItem(IDC_STATIC1)->GetParent())->RedrawWindow(&m_rect,0,RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE);
}大家有没有好的办法?
2是把父窗口的WS_CLIPCHILDREN风格加上
2,是从CStatic派生一个类下来,处理它的WM_ERASEBKGND消息,返回TRUE,表示不用重绘背景
3,用内存DC
把控件背景变为透明