您的位置:首页 > 编程语言 > C语言/C++

《C语言到底能干什么》1.14 简单的整蛊——窗口抖动程序的实现

2010-03-20 18:04 736 查看
一次朋友曾给我传了个有趣的程序,单击后振动的窗口飘来飘去,其实也就是不停地移动窗口,后来分析后,才知道原来只
是移动当前活动的窗口而已,想想这个也很好现,就是获得当前活动的窗口,然后用MoveWindow函数去改变它的位置不就
可以了,原来还以为这个程序有什么特别的呢,后来想也没什么了,这节我们来写个这样的程序,我也不想复杂的实现,就简单点。


/********************WobbleWnd.rc***************/


#include<resource.h>


#defineDLG_MAIN1

#defineICO_MAIN0X1000


//#defineIDB_BMP0X4000


ICO_MAINICON"XHK.ICO"

//IDB_BMPBITMAP"XHK.BMP"


DLG_MAINDIALOG255,205,100,100

STYLEWS_SYSMENU|WS_MINIMIZEBOX

CAPTION"WobbleWindow"

FONT9,"宋体"

{


}


下面是程序实现代码:

/***********WobbleWnd.c*****************/


#include<windows.h>


#defineDLG_MAIN1

#defineICO_MAIN0X1000



LRESULTCALLBACKDialogProc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam)

{

HINSTANCEhInstance=GetModuleHandle(NULL);

HICONhIcon;

HWNDhDestWnd;


RECTrc;

inti=0;


switch(uMsg)

{

caseWM_INITDIALOG:

hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(ICO_MAIN));

SendMessage(hWnd,WM_SETICON,ICON_BIG,(long)hIcon);

SetTimer(hWnd,0,10,NULL);

returnTRUE;

caseWM_TIMER:


i=(rand()-rand())/1000;


if((hDestWnd=GetForegroundWindow())!=NULL){

GetWindowRect(hDestWnd,&rc);

if(rc.top<0||rc.bottom>800)

rc.top=100;

if(rc.left<0||rc.right>1000)

rc.left=100;


MoveWindow(hDestWnd,rc.left+i,rc.top+i,rc.right-rc.left,rc.bottom-rc.top,TRUE);

}

//SendWindowMessage(

returnTRUE;

caseWM_CLOSE:

KillTimer(hWnd,0);//取消定时器

EndDialog(hWnd,0);

returnTRUE;

}

returnFALSE;

}


intWINAPIWinMain(HINSTANCEhInstance,

HINSTANCEhPreInstance,

LPSTRlpCmdline,

intnShowCmd)

{

DialogBoxParam(hInstance,MAKEINTRESOURCE(DLG_MAIN),0,DialogProc,0);

srand((unsigned)time(NULL));

return1;

}

代码是相当简单的,没有任何要学习的东西,纯粹是为了吸引大家的兴趣,让大家看看自己的学的东西到底能用到什么地方。
当我完成这个之后,把代码给我同学看,同学们都不相信这么少的代码就能做到。这个程序如果不要窗口和资源,写成控制
台的程序,代码会更少。由于我没有很好的想这个程序那个随机的算法,可能窗口会有向左上角移动的趋势,而且最终窗口
会变得的小。这个问题大家是会解决的,不会编程都可以解决的,何况会编程的你呢。



总结:

这样吧,这章就这样结束了,当然窗口类程序的编写,这里说的只是一点皮毛而已,但这些都是基础,学好了对以后就会很
有帮助的,而且你现在已经可以做出窗口的程序了,是不?说明你已经可以脱离菜鸟级了,Comeon吧,很快你就会成为高
手的。俗话说,师傅领进门,修行靠个人,我以前把你领到这里了,你想去哪里就去哪里吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: