Accueil > > > PACMAN_DESKTOP
PACMAN_DESKTOP
Information sur la source
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
- #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;
- }
-
#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 :)
Historique
- 16 février 2009 16:55:22 :
- débugage des icons
- 24 février 2009 19:42:10 :
- Correction des Répétitions de fonction, correction du bug durectangle de sélection
- 24 février 2009 19:45:52 :
- Correction du bugs du rectangle de selection
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Changer d'icon [ par Blade ]
Bonjour,je suis un debutant et je voudrais savoir comment changer l'icone en haut de la fenetre que je cree en C++.ca fait maintenant 2h que je cherch
Pb pour recuper le callback [ par Lombric ]
Je comprend pas bien comment faire pour recuperer un callback (de mon icon placer en barre des taches)pour faire apparaitre un menu par exemple en VC+
[Allegro] Animation d'objets [ par GoldenEye ]
La situation est simpleOn est en true color (Allegro)J'ai un décor de fond statique (BITMAP *decor)J'ai un petit objet mobile (BITMAP *objet)Le petit
PACMAN [ par firesnake ]
Bonjour tout le monde! Je viens de terminer mon premier jeu DOS en Borland C++ : PACMAN 1.0. C'est plutot une version de test qu'un jeu à part entière
opengl et animation [ par spirit ]
ben voilà, j'aimerai savoir où est-ce que je pourrais trouver un bon tutorial sur l'animation des personnages dans un programme utilisant OpenGL!
icon extract code source [ par telmouni ]
bs de code source pour l'extraction de l'icon des *.exe
pacman en langage c ? [ par abdehue ]
size=3]Je voulais savoir si qqn savait ou je pourrais trouver la source d'un pacman réalisé en langage c uniquement...Merci de répondre. :)[/size=3]
animation 3ds en directx [ par heidi79 ]
Je cherche à lancer une animation inclue dans un fichier .x (converti à partir d'un fichier .3ds) grâce à directx.J'ai cru voir sur différents sites q
animation sur directx [ par heidi79 ]
quelqu'un saurait-il comment lancer une animation contenue dans un fichier .3ds?Je sais convertir en .xJe sais afficher l'objet 3d.Apres plusieurs rec
animation .x [ par heidi79 ]
Je souhaite lancer une animation contenue dans un fichier .x.Je sais l'afficher.Je utiliser D3DXLoadMeshFromX()puis setMaterial() et setTexture().J'ai
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Forum
ARBRE BINAIREARBRE BINAIRE par pacotheking
Cliquez pour lire la suite par pacotheking
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|