VC GDI 关于桌面雪花
在桌面模拟下雪,那种小雪已实现。现在飘的是雪花,有没有什么办法画出来.?我现在有那个雪花图片大概有2种思路1.通过把位图背景透明处理,把雪花直接贴到桌面上,我试了下如果不...
在桌面模拟下雪,那种小雪已实现。现在飘的是雪花,有没有什么办法画出来.? 我现在有那个雪花图片 大概有2种思路
1.通过把位图背景透明处理,把雪花直接贴到桌面上, 我试了下 如果不刷新,那满屏都是雪花 可是怎么给窗口刷新呢.? 这个应该是整个屏幕的最上层,而不是桌面窗口吧?
2,后来没办法,就想通过弄大概10个窗口,把图片贴在窗口,响应定时器,MoveWindow(),可这个很占内存和卡CPU吧?SetLayeredWindowAttributes通过该函数给窗体透明化的..当窗口很多,刚开始的时候 屏幕狂闪,后来就好。
我想请高手指点下,怎么才能实现,或者说我2者思路都不正确呢?
还有个问题 雪花图片背景我用PS看了下,颜色背景有点杂 虽然看上去都是黑的和白的..呵呵 当然这个问题可以不答 不是主要因素呢.
有源代码的贴份我 谢谢 595207641 ..QQ 有一起研究的加
你那代码我看过..我需要关键代码 雪花该怎么画 怎么刷新 这都是重点...谢谢了 完整的贴份 展开
1.通过把位图背景透明处理,把雪花直接贴到桌面上, 我试了下 如果不刷新,那满屏都是雪花 可是怎么给窗口刷新呢.? 这个应该是整个屏幕的最上层,而不是桌面窗口吧?
2,后来没办法,就想通过弄大概10个窗口,把图片贴在窗口,响应定时器,MoveWindow(),可这个很占内存和卡CPU吧?SetLayeredWindowAttributes通过该函数给窗体透明化的..当窗口很多,刚开始的时候 屏幕狂闪,后来就好。
我想请高手指点下,怎么才能实现,或者说我2者思路都不正确呢?
还有个问题 雪花图片背景我用PS看了下,颜色背景有点杂 虽然看上去都是黑的和白的..呵呵 当然这个问题可以不答 不是主要因素呢.
有源代码的贴份我 谢谢 595207641 ..QQ 有一起研究的加
你那代码我看过..我需要关键代码 雪花该怎么画 怎么刷新 这都是重点...谢谢了 完整的贴份 展开
2个回答
展开全部
HDC hDC = GetDC(m_hWndDesktop);
if(hDC)
{
RECT rc;
rc.left = m_nCurrentX;
rc.top = m_nCurrentY;
rc.right = m_nCurrentX+15;
rc.bottom = m_nCurrentY+15;
// 15 is for a little drift at the bottom of the desktop
int nTestHeight = m_nScreenHeight - 15;
// redraw the desktop window right away
if(m_nCurrentY// snow drift here
RedrawWindow(m_hWndDesktop, &rc, NULL, RDW_INVALIDATE
| RDW_ERASE | RDW_UPDATENOW );
// ....
m_nCurrentX += m_nIncrement;
if(m_nCurrentY>m_nScreenHeight)
{
m_nCurrentY = 0;
m_nCurrentX = abs(rand()*m_nScreenWidth/RAND_MAX);
if(abs(rand()*100/RAND_MAX)>50)
m_bIsBigFlake = TRUE;
else
m_bIsBigFlake = FALSE;
}
// ...
HPEN pOldPen = (HPEN)SelectObject(hDC, m_hFlakePen);
// ....
// specify RDW_NOERASE to keep the desktop from drawing the background
if(!m_bIsVista)
{
if(!m_bOverIcons && m_nCurrentY// Restore DC settings to their original values
RestoreDC(hDC, storedDC);
// Release the DC
ReleaseDC(m_hWndDesktop, hDC);
}
if(hDC)
{
RECT rc;
rc.left = m_nCurrentX;
rc.top = m_nCurrentY;
rc.right = m_nCurrentX+15;
rc.bottom = m_nCurrentY+15;
// 15 is for a little drift at the bottom of the desktop
int nTestHeight = m_nScreenHeight - 15;
// redraw the desktop window right away
if(m_nCurrentY// snow drift here
RedrawWindow(m_hWndDesktop, &rc, NULL, RDW_INVALIDATE
| RDW_ERASE | RDW_UPDATENOW );
// ....
m_nCurrentX += m_nIncrement;
if(m_nCurrentY>m_nScreenHeight)
{
m_nCurrentY = 0;
m_nCurrentX = abs(rand()*m_nScreenWidth/RAND_MAX);
if(abs(rand()*100/RAND_MAX)>50)
m_bIsBigFlake = TRUE;
else
m_bIsBigFlake = FALSE;
}
// ...
HPEN pOldPen = (HPEN)SelectObject(hDC, m_hFlakePen);
// ....
// specify RDW_NOERASE to keep the desktop from drawing the background
if(!m_bIsVista)
{
if(!m_bOverIcons && m_nCurrentY// Restore DC settings to their original values
RestoreDC(hDC, storedDC);
// Release the DC
ReleaseDC(m_hWndDesktop, hDC);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询