现在的位置: 首页 > 综合 > 正文

VC闪屏振动

2018年02月01日 ⁄ 综合 ⁄ 共 952字 ⁄ 字号 评论关闭

    闪屏振动的原理其实很简单,创建一个线程,在线程中MoveWindow或SetWindowPos即可。

   核心代码:

   #include "mmsystem.h"
#pragma comment(lib,"winmm.lib")
UINT ShakeThread(LPVOID pParam);
int m_nXStrength(5),m_nYStrength(5);
void CShakeDlg::OnButton1() //点击后即可振动

 AfxBeginThread(ShakeThread,
            this,
            THREAD_PRIORITY_NORMAL,
            0,0,NULL);
}

UINT ShakeThread(LPVOID pParam)
{
 CShakeDlg *pDlg  = (CShakeDlg *)pParam;
 ::srand (::GetTickCount());//初始化随机数发生器
 CRect rect;
 GetWindowRect(AfxGetMainWnd()->m_hWnd,&rect);
// GetClientRect(AfxGetMainWnd()->m_hWnd,&rect);
 ::PlaySound ("Shake.wav",NULL,SND_FILENAME |SND_ASYNC );//播放音乐
 for(int i=39;i>=0;i--){
  int x=pDlg->GetSign()*rand()%m_nXStrength*i/10+rect.left;
  int y=pDlg->GetSign()*rand()%m_nXStrength*i/10+rect.top;
  ::SetWindowPos(AfxGetMainWnd()->m_hWnd,0,x,//振动效果
  y,0,0,SWP_NOSIZE|SWP_NOREPOSITION  );
  ::Sleep (20);
 }
 ::SetWindowPos(AfxGetMainWnd()->m_hWnd,0,rect.left,
  rect.top,0,0,SWP_NOSIZE|SWP_NOREPOSITION  );//还原原来的位置
 return 0;
}

 

示例工程已上传。

【上篇】
【下篇】

抱歉!评论已关闭.