Pacman_desktop

Soyez le premier à donner votre avis sur cette source.

Vue 4 635 fois - Téléchargée 383 fois

Description

Voici un petit programme qui crée une icone sur le bureau en forme de pacman et qui cherche à manger ça pièce
je me suis inspiré de la source : http://www.cppfrance.com/codes/ANIMEZ-VOTRE-BUREAU-WIN32_16843.aspx

Source / Exemple :


#include <windows.h>

#define DTime 10
#define DTimeMouve 100
#define TaileIcon 32
HINSTANCE hInst;
HWND hWndDesktop;

HICON     hIcon[5][4];
HICON     hPiece;
POINT     ptIcon= { 0,  0};
POINT     ptPiece={200,200};
int*      iTableau;
HDC       hDC;
int       iPoseIcon=0;
bool      bMouve=0;
int       iMouve=0;
bool      bClikG=0,bTour=0;
HWND FindDesktopWindow(void)
{
    HWND hWnd = FindWindow("Progman", "Program Manager");

    if(GetParent(hWnd) == NULL)
    { 
        HWND hWndEnfant = GetWindow(hWnd, GW_CHILD);
        char szBuf[32];

        while(hWndEnfant != NULL)
        {
            GetClassName(hWndEnfant, szBuf, sizeof(szBuf));
            if(lstrcmp(szBuf, "SHELLDLL_DefView") == 0) break;
            hWndEnfant = GetWindow(hWndEnfant, GW_HWNDNEXT);
        }
        if(hWndEnfant != NULL)
        {
            hWndEnfant = GetWindow(hWndEnfant, GW_CHILD);
            while(hWndEnfant != NULL)
            {
                GetClassName(hWndEnfant, szBuf, sizeof(szBuf));
                if(lstrcmp(szBuf, "SysListView32") == 0) break;
                hWndEnfant = GetWindow(hWndEnfant, GW_HWNDNEXT);
            }
            if(hWndEnfant != NULL) return hWndEnfant; 
        }
    }
    return GetDesktopWindow(); 
}
void EffaceIcon(HWND hWnd,POINT &p)
{
    RECT r;

    r.right  = (r.left = p.x) + TaileIcon;
    r.bottom = (r.top  = p.y) + TaileIcon;
    InvalidateRect(hWnd, &r, true);
    UpdateWindow(hWnd);
}
void DessineIcon(HDC hDC,POINT p,HICON hIcone)
{
    
    DrawIcon(hDC,  p.x,  p.y, hIcone);
    DestroyIcon(hIcone);
}

void DeplaceIcon()
{
    if(ptIcon.x!=ptPiece.x)
    {
        if(ptIcon.x<ptPiece.x)
        {
            iPoseIcon=0;
            ptIcon.x++;
        }
        else
        {
            iPoseIcon=1;
            ptIcon.x--;
        }
    }
    else
    {
        if(ptIcon.y!=ptPiece.y)
        {
            if(ptIcon.y<ptPiece.y)
            {
                iPoseIcon=3;
                ptIcon.y++;
            }
            else
            {
                iPoseIcon=2;
                ptIcon.y--;
            }
        }
    }
    if(ptIcon.y==ptPiece.y&&ptIcon.x==ptPiece.x)
    {
        EffaceIcon(hWndDesktop,ptPiece);
        ptPiece.x=rand()%(GetSystemMetrics(SM_CXSCREEN) - 32);
        ptPiece.y=rand()%(GetSystemMetrics(SM_CYSCREEN) - 64);
        
    }
}

void CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT uTimerId, DWORD dwTime)
{
   
   DeplaceIcon();
   EffaceIcon(hWndDesktop,ptIcon);
   if(HIBYTE(GetAsyncKeyState(VK_ESCAPE)))
    {
      if(hWndDesktop == GetFocus())
        {
             PostQuitMessage (0);
        }
    }
     
     if(HIBYTE(GetAsyncKeyState(VK_LBUTTON)))
    {
      if(hWndDesktop == GetFocus())
      {
        bClikG=1;
        bTour=1;
        EffaceIcon(hWndDesktop,ptPiece);
        GetCursorPos(&ptPiece);
        ptPiece.x -= 16;
        ptPiece.y -= 32;
        
      }
    }  
    if(bClikG&&!bTour)
    {
        bClikG=0;
        InvalidateRect(hWndDesktop,0,TRUE);
    }
    bTour=0;
     EffaceIcon(hWndDesktop,ptIcon);
    if(hDC = GetDC(hWndDesktop))
    {
      DessineIcon(hDC,ptIcon ,hIcon[iPoseIcon][iMouve]);
      DessineIcon(hDC,ptPiece,hPiece);
      ReleaseDC(hWndDesktop, hDC);
    }   
       
}
void CALLBACK TimerMove(HWND hWnd, UINT uMsg, UINT uTimerId, DWORD dwTime)
{
    if(!bMouve)
    {
        if(iMouve++==2)
        bMouve=true;
    }
    else
    {
        if(iMouve--==0)
        bMouve=false;
    }
}
    
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    MSG messages;
    DWORD dwPid;
    
    char cBuffer[7];
    hInst = hThisInstance;
    hWndDesktop=FindDesktopWindow(); 
    
    dwPid = GetWindowThreadProcessId(hWndDesktop, NULL);    
    if(!AttachThreadInput(dwPid, GetCurrentThreadId(), TRUE))
    return 0; 
    
   if(!(hPiece = LoadIcon(hInst, "Icon12")))
           return 0;
    
    for(int j=0;j<=3;j++)
    {
        for(int i = 0; i <= 2; i++)
        {
            wsprintf(cBuffer, "Icon%d",i+(j*3));
            if(!(hIcon[j][i] = LoadIcon(hInst, cBuffer)))
            return 0;
        }
    }
        
    
    srand((UINT)GetTickCount());     
    if(hDC = GetDC(hWndDesktop))
        {
            DessineIcon(hDC,ptPiece,hPiece);
            ReleaseDC(hWndDesktop, hDC);
        } 
    SetTimer(NULL, 1, DTime, TimerProc);
    SetTimer(NULL, 2, DTimeMouve, TimerMove);
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    
    AttachThreadInput(dwPid, GetCurrentThreadId(), FALSE);    
    KillTimer(NULL, 1);
    KillTimer(NULL, 2);
    InvalidateRect(hWndDesktop, 0, TRUE);
    return messages.wParam;
}

Conclusion :


Voila j'espère qu'il vous aura plus :)

Codes Sources

Ajouter un commentaire Commentaires
Messages postés
216
Date d'inscription
samedi 11 août 2007
Statut
Membre
Dernière intervention
30 mai 2011

Bien...
Compile le et exécute le comme un exe normal.
ou change le fichier ex_ en exe dans le zip.
Et presse escape pour le stoper
Messages postés
1
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
2 avril 2011

Comment on le fait fonctionner?
Messages postés
216
Date d'inscription
samedi 11 août 2007
Statut
Membre
Dernière intervention
30 mai 2011

ha sa oui sa me le fais aussi je vais essayer de coriger sa ^^
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
1
Non, seul pacman clignote.
Mais le problème est quand on clique puis laisse glisser la souris (pour faire apparaitre le rectangle de sélection) : il ne disparait pas au relâchement de la souris, et très rapidement ça devient imposant sur le bureau ^^.
Messages postés
216
Date d'inscription
samedi 11 août 2007
Statut
Membre
Dernière intervention
30 mai 2011

pour quoi tous le bureau cliniotte ou juste l'ecran cher toi ?
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.