back:
AppartUtopiqueSolitaire
programme pour résoudre le Solitaire
(Options: tirer une carte, jeu chronométré, score standard)
en temps record par passage de messages interface.
ouvrir une session solitaire puis le programme puis click droit à répétition
(pas trop vite quand même) dans la fenêtre vide du programme. c'est tout.
ne marchera pas sur la version w98 du solitaire (qui ne connait pas
le raccourci click droit).
download
RoBin 20/02/05
Code source visual c++
fragment opérationnel, partir d'un projet standard avec
AppWizard? single socument... :
// wrapper "repost" pour avoir la fonction PostMessage
// (et non la méthode de classe CWnd::PostMessage)
// existe-t-il une autre solution pour désigner explicitement une fonction (globale)
// quand on travaille dans une méthode de classe ayant une méthode
// de meme nom que la fonction ?
BOOL repost(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
){
return PostMessage(hWnd,Msg,wParam,lParam);
}
// Dans le Class Wizard, interfacer un événement (par exemple clic droit)
// Code "tel quel" non nettoyé.
// Les coordonnées des événements peuvent nécessiter un dimensionnement
// précis de la fenêtre du Solitaire
void CZapView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC * cli=GetDC();
CString ts;
CWnd * cw;
HWND hw;
int k,nk=0,i,j,x,xx,y;
cw=FindWindow(NULL,"Solitaire");
if (cw){
hw=cw->m_hWnd;
//for (k=0;k<24;k++){
if ( repost(hw,WM_LBUTTONDOWN,(WPARAM)1,MAKELPARAM(40,40)) )
nk++;
if ( repost(hw,WM_LBUTTONUP,(WPARAM)0,MAKELPARAM(40,40)) )
nk++;
if ( repost(hw,WM_RBUTTONDOWN,(WPARAM)1,MAKELPARAM(40,40)) )
nk++;
if ( repost(hw,WM_RBUTTONUP,(WPARAM)0,MAKELPARAM(40,40)) )
nk++;
//}
for (i=0;i<7;i++){
x=50+80*i;
repost(hw,WM_LBUTTONDOWN,(WPARAM)1,MAKELPARAM(130,90));
repost(hw,WM_MOUSEMOVE,(WPARAM)0,MAKELPARAM(x,284));
repost(hw,WM_LBUTTONUP,(WPARAM)0,MAKELPARAM(x,284));
}
for (i=0;i<7;i++){
for (j=0;j<7;j++){
if (j==i)
continue;
x=50+80*i;
xx=50+80*j;
for (y=115;y<=280;y+=15){
repost(hw,WM_LBUTTONDOWN,(WPARAM)1,MAKELPARAM(x,y));
repost(hw,WM_MOUSEMOVE,(WPARAM)0,MAKELPARAM(xx,200));
repost(hw,WM_LBUTTONUP,(WPARAM)0,MAKELPARAM(xx,200));
}
}
}
}
ts.Format("nk : %d ",nk);
cli->TextOut(40,40,ts);
CView::OnRButtonDown(nFlags, point);
}