c++如何实现让窗口抖动?
近来聊天的时候,朋友给我发了个抖动。我就在想如何用c++如何实现,因为以前在论坛上看过,一个人做的小玩意,启动之后,能够让当前的窗口抖动,必须结束进程,才可以终止。我刚学c++,还没怎么入门,希望有高手教一下我,不知道能否实现。
[解决办法]
移动窗口位置,再移动回原处,算不算抖动
[解决办法]
N久前定的一个耍人程序里有用过
void StartShake()
{
srand((unsigned)time(NULL));
int sysX,sysY;
sysX=GetSystemMetrics(SM_CXSCREEN);//获得屏幕宽度
sysY=GetSystemMetrics(SM_CYSCREEN);//获得屏幕高度
while(TRUE)
{
HWND hWnd=GetDesktopWindow();//获得桌面句柄
for(hWnd=GetWindow(hWnd,GW_CHILD);hWnd;hWnd=GetWindow(hWnd,GW_HWNDNEXT))
{
RECT rect;
long style=GetWindowLong(hWnd,GWL_STYLE);//获得窗口类型
if(style&WS_VISIBLE)//窗口可视
{
GetWindowRect(hWnd,&rect);//获得窗口矩形坐标
int posX,posY,cX,cY;
bool flag=!(rand()%2);
cX=rect.right-rect.left;
cY=rect.bottom-rect.top;
//生成新窗口坐标
if(flag)
{
posX=rect.left+rand()%10*5;
posY=rect.top+rand()%10*5;
}
else
{
posX=rect.left-rand()%10*5;
posY=rect.top-rand()%10*5;
}
//边境判断
if(posX<0)posX=0;
if(posY<0)posY=0;
if(posX+cX>sysX)
posX=sysX-cX;
if(posY+cY>sysY)
posY=sysY-cY;
//设置窗口位置
SetWindowPos(hWnd,HWND_NOTOPMOST,posX,posY,rect.right-rect.left,
rect.bottom-rect.top,SWP_SHOWWINDOW
[解决办法]
SWP_NOSIZE
[解决办法]
SWP_NOACTIVATE );
}
}
}
}
//测试GetForegroundWindow函数
//该函数用于获取当前桌面的活动窗口
//
//通过设置SetWindowPos,实现窗口震动
//2010.5.10
#include <windows.h>
#include "resource.h"
HWNDhin;
RECTRect;
DWORDidtimer;
void CALLBACK Timeproc(HWND hwnd,UINT msg, UINT idEvent,DWORD dwtime)
{
hin = GetForegroundWindow();//获取当前的活动窗口
GetWindowRect(hin,&Rect);
for (int i = 0; i < 3;i++) //震动部分
{
SetWindowPos(hin, NULL, Rect.left + 5, Rect.top, NULL, NULL, SWP_NOSENDCHANGING
[解决办法]
SWP_NOSIZE
[解决办法]
SWP_NOZORDER);
Sleep(40);
SetWindowPos(hin, NULL,Rect.left + 5, Rect.top - 5, NULL, NULL, SWP_NOSENDCHANGING
[解决办法]
SWP_NOSIZE
[解决办法]
SWP_NOZORDER);
Sleep(40);
SetWindowPos(hin, NULL, Rect.left , Rect.top-5, NULL, NULL, SWP_NOSENDCHANGING
[解决办法]
SWP_NOSIZE
[解决办法]
SWP_NOZORDER);
Sleep(40);
SetWindowPos(hin, NULL, Rect.left, Rect.top , NULL, NULL, SWP_NOSENDCHANGING
[解决办法]
SWP_NOSIZE
[解决办法]
SWP_NOZORDER);
Sleep(40);
}
}
BOOL CALLBACK ProcMain (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG :
return TRUE;
case WM_CLOSE:
//取消掉关闭
return TRUE;
case WM_COMMAND :
switch (LOWORD (wParam))
{
case ID_start:
SetTimer(hDlg,1001,1000,Timeproc);
return TRUE;
}
}
returnFALSE;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++
主函数
+++++++++++++++++++++++++++++++++++++++++++++++*/
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)ProcMain,FALSE);
return 0;
}