快讯

VC制作具有声音效果的动画桌面精灵

2004-02-14 09:34  出处:PConline  作者:Future Studio.徐景周  责任编辑:zwg 

3、新建一.cpp文件,取名:TransparentWnd.cpp 代码内容如下: // TransparentWnd.cpp : implementation file ////////////////////////////////////// //作者: 徐景周. 2000.12 //功能:透明位图及WAV资源播放 ////////////////////////////////////// #include "stdafx.h" #include "West.h" #include "TransparentWnd.h" #include "WestDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // TransparentWnd TransparentWnd::TransparentWnd() { m_iAniSeq=0; //图像变化初始值 } TransparentWnd::~TransparentWnd() { } BEGIN_MESSAGE_MAP(TransparentWnd, CWnd) //{{AFX_MSG_MAP(TransparentWnd) ON_WM_LBUTTONDOWN() ON_WM_CREATE() ON_WM_ERASEBKGND() ON_WM_TIMER() ON_WM_RBUTTONDOWN() ON_COMMAND(IDR_HELP, OnHelp) ON_COMMAND(IDR_EXIT, OnExit) //}}AFX_MSG_MAP END_MESSAGE_MAP() //******************************************************************************** //* CreateTransparent() //* //* Creates the main application window transparent //******************************************************************************** void TransparentWnd::CreateTransparent(LPCTSTR pTitle, RECT &rect) { // 创建一个隐藏窗口 CreateEx( 0, AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)), pTitle, WS_POPUP , rect, NULL, NULL, NULL); DoChange(); } //******************************************************************************** //* SetupRegion() //* //* Set the Window Region for transparancy outside the mask region //******************************************************************************** void TransparentWnd::SetupRegion(CDC *pDC) { CDC memDC; CBitmap &cBitmap=m_bmpDraw; CBitmap* pOldMemBmp = NULL; COLORREF col,colMask; CRect cRect; int x, y; CRgn wndRgn, rgnTemp; GetWindowRect(&cRect); CPoint ptOrg=cRect.TopLeft(); BITMAP bmInfo; cBitmap.GetObject(sizeof(bmInfo),&bmInfo); CRect rcNewWnd=CRect(ptOrg,CSize(bmInfo.bmWidth,bmInfo.bmHeight)); memDC.CreateCompatibleDC(pDC); pOldMemBmp = memDC.SelectObject(&cBitmap); colMask=memDC.GetPixel(0,0); wndRgn.CreateRectRgn(0, 0, rcNewWnd.Width(), rcNewWnd.Height()); for(x=0; x<=rcNewWnd.Width(); x++) { for(y=0; y<=rcNewWnd.Height(); y++) { col = memDC.GetPixel(x, y); if(col == colMask) { rgnTemp.CreateRectRgn(x, y, x+1, y+1); wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_XOR); rgnTemp.DeleteObject(); } } } if (pOldMemBmp) memDC.SelectObject(pOldMemBmp); SetWindowRgn((HRGN)wndRgn, TRUE); MoveWindow(rcNewWnd); } void TransparentWnd::DoChange(void) { char szBmp[20]; //不断替换图像 sprintf(szBmp,"WEST%d",m_iAniSeq%2+1); m_bmpDraw.DeleteObject(); m_bmpDraw.LoadBitmap(szBmp); CWindowDC dc(this); SetupRegion(&dc); Invalidate(); } void TransparentWnd::SoundPlay(void) { //先关闭原声音播放 PlaySound("WEST",AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT ); SetTimer(2,61080,NULL); //设置播放声音时间61.08秒 //资源WAV文件的ID须加双引号,用下API函数播放 PlaySound("WEST",AfxGetResourceHandle(),SND_RESOURCE|SND_ASYNC|SND_NODEFAULT ); } void TransparentWnd::OnLButtonDown(UINT nFlags, CPoint point) { CWnd::OnLButtonDown(nFlags, point); //实现无标题拖动 PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y)); } int TransparentWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; SetTimer(1,1000,NULL); //开始时的图像显示时间 SetTimer(2,500,NULL); //启动声音播放计时器 SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); //窗体总在总前面 return 0; } BOOL TransparentWnd::OnEraseBkgnd(CDC* pDC) { CRect rect; GetWindowRect(&rect); CDC memDC; CBitmap &cBitmap=m_bmpDraw;; CBitmap* pOldMemBmp = NULL; CFont* pOldMemFont=NULL; memDC.CreateCompatibleDC(pDC); pOldMemBmp = memDC.SelectObject(&cBitmap); pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY); if (pOldMemBmp) memDC.SelectObject( pOldMemBmp ); return TRUE; // return CWnd::OnEraseBkgnd(pDC); } void TransparentWnd::OnTimer(UINT nIDEvent) { switch(nIDEvent) { case(1)://变换图像 DoChange(); break; case(2): //播放声音 SoundPlay(); break; default: break; } m_iAniSeq++; if(m_iAniSeq==2) m_iAniSeq=0; CWnd::OnTimer(nIDEvent); } void TransparentWnd::OnRButtonDown(UINT nFlags, CPoint point) { CWnd::OnRButtonDown(nFlags, point); DestroyWindow(); //鼠标右键点击时关闭此程序 }
键盘也能翻页,试试“← →”键
IT热词搜索 来源:360新闻
软件论坛帖子排行
相关文章

相关软件:

腾讯QQ2012
大小:52.93 MB 授权:免费
腾讯QQ2012
立即下载
腾讯QQ2013
大小:49.32 MB 授权:免费
腾讯QQ2013
立即下载