首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++怎么实现让窗口抖动

2013-01-11 
c++如何实现让窗口抖动?近来聊天的时候,朋友给我发了个抖动。我就在想如何用c++如何实现,因为以前在论坛上

c++如何实现让窗口抖动?
近来聊天的时候,朋友给我发了个抖动。我就在想如何用c++如何实现,因为以前在论坛上看过,一个人做的小玩意,启动之后,能够让当前的窗口抖动,必须结束进程,才可以终止。我刚学c++,还没怎么入门,希望有高手教一下我,不知道能否实现。
[解决办法]
移动窗口位置,再移动回原处,算不算抖动
[解决办法]

引用:
移动窗口位置,再移动回原处,算不算抖动

呵呵,也只能如此,用MoveWindow这个API。
[解决办法]

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 );
}
}
}
}

N久前定的一个耍人程序里有用过
[解决办法]
可以做到。给你一个以前玩的程序:让当前窗口震动。
//测试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;
}


[解决办法]
设置定时器,设置一个标志位,是true时,MoveWindow一个位置,然后是false时,在把它Move到
最初的位置,在每次操作Move这个动作之后,记得把标志位置一下,这样在下次判断的时候,可以起到作用。
[解决办法]
我自己也做过一个,就用一个MoveWindow函数就可以实现了,但要移动桌面上的其他窗口难度会大点,楼主有兴趣的话加我QQ(759976599)吧,我正在学习API和MFC,希望结识更多的编程爱好者共同学习

热点排行