一次朋友曾给我传了个有趣的程序,单击后振动的窗口飘来飘去,其实也就是不停地移动窗口,后来分析后,才知道原来只
是移动当前活动的窗口而已,想想这个也很好现,就是获得当前活动的窗口,然后用MoveWindow函数去改变它的位置不就
可以了,原来还以为这个程序有什么特别的呢,后来想也没什么了,这节我们来写个这样的程序,我也不想复杂的实现,就简单点。
/********************WobbleWnd.rc***************/
#include <resource.h>
#define DLG_MAIN 1
#define ICO_MAIN 0X1000
//#define IDB_BMP 0X4000
ICO_MAIN ICON "XHK.ICO"
//IDB_BMP BITMAP "XHK.BMP"
DLG_MAIN DIALOG 255,205,100,100
STYLE WS_SYSMENU | WS_MINIMIZEBOX
CAPTION "Wobble Window"
FONT 9,"宋体"
{
}
下面是程序实现代码:
/***********WobbleWnd.c*****************/
#include <windows.h>
#define DLG_MAIN 1
#define ICO_MAIN 0X1000
LRESULT CALLBACK DialogProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
HINSTANCE hInstance = GetModuleHandle(NULL);
HICON hIcon;
HWND hDestWnd;
RECT rc;
int i=0;
switch(uMsg)
{
case WM_INITDIALOG:
hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(ICO_MAIN));
SendMessage(hWnd,WM_SETICON,ICON_BIG,(long)hIcon);
SetTimer(hWnd,0,10,NULL);
return TRUE;
case WM_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(
return TRUE;
case WM_CLOSE:
KillTimer(hWnd,0);//取消定时器
EndDialog(hWnd,0);
return TRUE;
}
return FALSE;
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPreInstance,
LPSTR lpCmdline,
int nShowCmd)
{
DialogBoxParam(hInstance,MAKEINTRESOURCE(DLG_MAIN),0,DialogProc,0);
srand((unsigned)time(NULL));
return 1;
}
代码是相当简单的,没有任何要学习的东西,纯粹是为了吸引大家的兴趣,让大家看看自己的学的东西到底能用到什么地方。
当我完成这个之后,把代码给我同学看,同学们都不相信这么少的代码就能做到。这个程序如果不要窗口和资源,写成控制
台的程序,代码会更少。由于我没有很好的想这个程序那个随机的算法,可能窗口会有向左上角移动的趋势,而且最终窗口
会变得的小。这个问题大家是会解决的,不会编程都可以解决的,何况会编程的你呢。
总结:
这样吧,这章就这样结束了,当然窗口类程序的编写,这里说的只是一点皮毛而已,但这些都是基础,学好了对以后就会很
有帮助的,而且你现在已经可以做出窗口的程序了,是不?说明你已经可以脱离菜鸟级了,Come on吧,很快你就会成为高
手的。俗话说,师傅领进门,修行靠个人,我以前把你领到这里了,你想去哪里就去哪里吧。