VC GDI 关于桌面雪花

在桌面模拟下雪,那种小雪已实现。现在飘的是雪花,有没有什么办法画出来.?我现在有那个雪花图片大概有2种思路1.通过把位图背景透明处理,把雪花直接贴到桌面上,我试了下如果不... 在桌面模拟下雪,那种小雪已实现。现在飘的是雪花,有没有什么办法画出来.? 我现在有那个雪花图片 大概有2种思路
1.通过把位图背景透明处理,把雪花直接贴到桌面上, 我试了下 如果不刷新,那满屏都是雪花 可是怎么给窗口刷新呢.? 这个应该是整个屏幕的最上层,而不是桌面窗口吧?
2,后来没办法,就想通过弄大概10个窗口,把图片贴在窗口,响应定时器,MoveWindow(),可这个很占内存和卡CPU吧?SetLayeredWindowAttributes通过该函数给窗体透明化的..当窗口很多,刚开始的时候 屏幕狂闪,后来就好。
我想请高手指点下,怎么才能实现,或者说我2者思路都不正确呢?
还有个问题 雪花图片背景我用PS看了下,颜色背景有点杂 虽然看上去都是黑的和白的..呵呵 当然这个问题可以不答 不是主要因素呢.
有源代码的贴份我 谢谢 595207641 ..QQ 有一起研究的加
你那代码我看过..我需要关键代码 雪花该怎么画 怎么刷新 这都是重点...谢谢了 完整的贴份
展开
 我来答
dzf2018
2010-03-16 · TA获得超过5267个赞
知道大有可为答主
回答量:823
采纳率:40%
帮助的人:624万
展开全部
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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
修罗_逆
2010-03-21 · 超过22用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:0
展开全部
百度Hi 我有源代码。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式