fredsor
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
13 juil. 2007 à 09:03
Pas de souci juju12, merci de répondre je commencais a desesperer!!
Voici ma création de controle :
case WM_CREATE:
{
for(int i=0;i<GetNombreComposant();i++)
{
if(strncmp(GetTableauDescription(i),"B",1)==0)
{
hBtn[i] = CreateWindowEx(
0,
TEXT("BUTTON"),
ConvertAnsiToUnicode(GetContenu(i)),
WS_VISIBLE | WS_BORDER | WS_CHILD,
atoi(GetAbscisse(i)),
atoi(GetOrdonnee(i)),
atoi(GetLargeur(i,"B")),
atoi(GetHauteur(i,"B")),
hWnd,
HMENU(ID_BUTTON),
hinst,
NULL);
// OldButtonProc= NULL;
OldButtonProc = (WNDPROC) SetWindowLong(hBtn[i], GWL_WNDPROC, (LPARAM)ButtonProc); if(GetFocalisation(i)!=NULL)
{
boutonPourFocus=hBtn[i];
}
if(GetCouleur(i)!=NULL)
{
AttribuerCouleur(i,GetCouleur(i));
}
else
{
couleurFond[i]=fondGris;
couleurFondTexte[i]=gris;
couleurTexte[i]=noir;
}
}
else
{
hBtn[i]=NULL;
}
if(strncmp(GetTableauDescription(i),"E",1)==0)
{
hEdit[i] = CreateWindowEx(
0,
TEXT("EDIT"),
ConvertAnsiToUnicode(GetContenu(i)),
WS_VISIBLE | WS_BORDER | WS_CHILD|WS_TABSTOP,
atoi(GetAbscisse(i)),
atoi(GetOrdonnee(i)),
Pour t'expliquer un peu cette premiere partir, en fait je fais un parsing d'un fichier "codé" me disant quel composant créer, et j'en extrait les données. Donc si je tombe sur une ligne commencant par "B", je créé un Bouton avec les données requises. Ensuite je fais mon sous classement vers ButtonProc
Voila pourle sous classement par exemple du Bouton :
LRESULT CALLBACK ButtonProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_COMMAND:
{
if(LOWORD(wParam) == MYACCEL)
{
varGlobale = 1;
TabulationArriere();
}
break;
}
case WM_KEYUP:
{
EcrireFichierBidon("keyup btnproc");
if(wParam == VK_TAB)
{
if(!varGlobale)
{
GererKeyUp(hwnd,message,wParam,lParam);
}
else varGlobale = 0;
}
else
{
GererKeyUp(hwnd,message,wParam,lParam);
varGlobale=0;
}
break;
}
case WM_CHAR: // on gere le cas où une lettre est tapée : on doit vérifier si elle correspond à un bouton (premiere lettre soulignée par exemple)
{
EcrireFichierBidon("wmchar btnproc");
VerifierSiRaccourci(hwnd, message, wParam, lParam);
break;
}
default:
break;
}
return CallWindowProc(OldButtonProc, hwnd, message, wParam, lParam);
}
Dans ce sous classement je gere :
si une touche est relachee ( genre Entree, alors si le bouton a la focus on simule le clik
si une touche Char est entree, on verifie si le bouton n'a pas cette lettre de soulignée, auquel cas on simule egalement le clik
etc...
J'ai ainsi fait sur le meme principe un sous classement pour mes editbox, mes listbox et le WndProc général, si le focus est nulle part...
Et donc le souci, c'est que si j'appui sur un bouton pouvant etre utile également au deuxieme écran, il semble croire que j'appui également sur ce bouton une deuxieme fois..
J'espere que tu auras compris mes explications au combien claires ^^
Pour info, j'ai essayé d'initialiser toutes mes procedures de sous classement avant la création de l'ecran suivant, genre :
EditProc(NULL,NULL,NULL,NULL);
WndProc(NULL,NULL,NULL,NULL);
ListBoxProc(NULL,NULL,NULL,NULL);
ButtonProc(NULL,NULL,NULL,NULL);
GererKeyUp(NULL,NULL,NULL,NULL);
VerifierSiRaccourci(NULL,NULL,NULL,NULL);
Et meme essayé de mettre le MSG capté a NULL( ca c'est ptet pas terribl je l'avoue) :
msg.hwnd=NULL;
msg.lParam=NULL;
msg.message=NULL;
msg.time=NULL;
msg.wParam=NULL;
Voilou, je ne sais plus quoi faire!!