沧桑不尽
无穷的沧桑,不尽的落叶
一次朋友曾给我传了个有趣的程序,单击后振动的窗口飘来飘去,其实也就是不停地移动窗口,后来分析后,才知道原来只
是移动当前活动的窗口而已,想想这个也很好现,就是获得当前活动的窗口,然后用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吧,很快你就会成为高
手的。俗话说,师傅领进门,修行靠个人,我以前把你领到这里了,你想去哪里就去哪里吧。
posted on 2010-03-20 18:04  沧桑不尽  阅读(1270)  评论(0编辑  收藏  举报