Cstatic的闪烁有关问题.
Cstatic的闪烁问题.
我把一个子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时对窗口进行了重绘.可有时更新的时候有闪烁.
RECT m_rect;
::GetWindowRect(GetDlgItem(IDC_STATIC1)-> GetSafeHwnd(),&m_rect);
ScreenToClient(&m_rect);
bool b = this-> RedrawWindow(&m_rect,0,RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE);
大家有没有好的办法?
------解决方案--------------------
直接刷新控件好了
GetDlgItem(IDC_STATIC1)-> Invalidate();
------解决方案--------------------
方法很多啊,简单的就是LZ可以在Timer里面进行重绘,要不可以自己做一个类来实现,有一个好用而现成的类叫CLabel网上有得下载
------解决方案--------------------
闪烁问题出自RedrawWindow
建议自己SubClass一下或SuperClass一下自己响应一下他的WM_PAINT消息
我把一个子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时对窗口进行了重绘.可有时更新的时候有闪烁.
RECT m_rect;
::GetWindowRect(GetDlgItem(IDC_STATIC1)-> GetSafeHwnd(),&m_rect);
ScreenToClient(&m_rect);
bool b = this-> RedrawWindow(&m_rect,0,RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE);
大家有没有好的办法?
------解决方案--------------------
直接刷新控件好了
GetDlgItem(IDC_STATIC1)-> Invalidate();
------解决方案--------------------
方法很多啊,简单的就是LZ可以在Timer里面进行重绘,要不可以自己做一个类来实现,有一个好用而现成的类叫CLabel网上有得下载
------解决方案--------------------
闪烁问题出自RedrawWindow
建议自己SubClass一下或SuperClass一下自己响应一下他的WM_PAINT消息