关于在背景图片上的透明字符滚动有关问题,闪烁得太厉害了,应该怎么解决
关于在背景图片上的透明字符滚动问题,闪烁得太厉害了,应该如何解决?
我正在做一个软件的界面,现在有个需求是在一个绘制有背景图片的窗口上实现背景透明的字符滚动,我现在的做法能实现这个功能,不过闪烁太严重了,有没有什么办法解决?
我的做法是:
class CMyStatic public : CStatic
{
....
}
void CMyStatic::OnPaint()
{
CPaintDC dc(this);
dc.DrawText( m_strText, &m_rc, DT_SINGLELINE );
}
void CMyStatic:OnTimer( UINT nIDEvent )
{
if( nIDEvent == 1 )
{
m_rc.left++;
m_rc.right++;
GetWindowRect( &rc );
GetParent()-> ScreenToClient( &rc );
GetParent()-> InvalidateRect( &rc );
}
CStatic::OnTimer(nIDEvent);
}
------解决方案--------------------
BOOL CMyStatic::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
// return CStatic::OnEraseBkgnd(pDC);
}
------解决方案--------------------
把
typedef struct tagPAINTSTRUCT {
HDC hdc;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL fIncUpdate;
BYTE rgbReserved[16];
} PAINTSTRUCT;
中的 fErase 设置成false 试一下.
------解决方案--------------------
给你的窗口加上WS_EX_COMPOSITED扩展属性试一下
------解决方案--------------------
使用Mem DC,绘制好后,再bitblt
------解决方案--------------------
en 双缓存绘制
先把字显示在memdc 然后在绘制memdc...
------解决方案--------------------
作缓冲把
------解决方案--------------------
由于是在透明的背景上绘制,那么如果不包含背景的话,字符就会叠加在一起的
--------------------------------------
重绘之前用背景色填充一下缓存
------解决方案--------------------
先画到内存的DC中,再把内存中的DC画出来,,
------解决方案--------------------
赞成双缓冲绘图。
------解决方案--------------------
用双缓冲,
我正在做一个软件的界面,现在有个需求是在一个绘制有背景图片的窗口上实现背景透明的字符滚动,我现在的做法能实现这个功能,不过闪烁太严重了,有没有什么办法解决?
我的做法是:
class CMyStatic public : CStatic
{
....
}
void CMyStatic::OnPaint()
{
CPaintDC dc(this);
dc.DrawText( m_strText, &m_rc, DT_SINGLELINE );
}
void CMyStatic:OnTimer( UINT nIDEvent )
{
if( nIDEvent == 1 )
{
m_rc.left++;
m_rc.right++;
GetWindowRect( &rc );
GetParent()-> ScreenToClient( &rc );
GetParent()-> InvalidateRect( &rc );
}
CStatic::OnTimer(nIDEvent);
}
------解决方案--------------------
BOOL CMyStatic::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
// return CStatic::OnEraseBkgnd(pDC);
}
------解决方案--------------------
把
typedef struct tagPAINTSTRUCT {
HDC hdc;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL fIncUpdate;
BYTE rgbReserved[16];
} PAINTSTRUCT;
中的 fErase 设置成false 试一下.
------解决方案--------------------
给你的窗口加上WS_EX_COMPOSITED扩展属性试一下
------解决方案--------------------
使用Mem DC,绘制好后,再bitblt
------解决方案--------------------
en 双缓存绘制
先把字显示在memdc 然后在绘制memdc...
------解决方案--------------------
作缓冲把
------解决方案--------------------
由于是在透明的背景上绘制,那么如果不包含背景的话,字符就会叠加在一起的
--------------------------------------
重绘之前用背景色填充一下缓存
------解决方案--------------------
先画到内存的DC中,再把内存中的DC画出来,,
------解决方案--------------------
赞成双缓冲绘图。
------解决方案--------------------
用双缓冲,