Pb de changement de curseur (SetClassLong)

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 3 juin 2004 à 13:18
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 4 juin 2004 à 20:57
Voila,

J'essaye de changer le curseur lorsk l'utilisateur survole un controle static, j'utilise (a linstar de BruNews) la fonction SetClassLong mais celle ci ne fonctionne pas, enfin elle renvoie une valeur non nulle, j'ai testé tous les param, tous sont initialisés, donc tt a l'air de fonctionner mais ca marche po !
je poste la fonction DlgProc :

LRESULT CALLBACK DlgProc(HWND hwndDlg, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
char sMsg[40];

switch (uMessage) {
case WM_INITDIALOG:
SetDlgItemText(hwndDlg, IDC_ABOUT, "Developpé par Alhexman\r\nAlhexman@tiscali.fr");
if (!SetClassLong(GetDlgItem(hwndDlg, IDC_ABOUT), GCL_HCURSOR, (long)LoadCursor(hInstDlg, (LPCTSTR)IDCUR_ABOUT))) {
MessageBox(NULL, "Erreur", "ERREUR", MB_OK);
return FALSE;
}
return FALSE;
case WM_COMMAND:
switch(wParam) {
case IDC_CLOSE:
EndDialog(hwndDlg, 0);
return TRUE;
case IDC_REDUCE:
SendMessage(hwndDlg, WM_SYSCOMMAND, SC_MINIMIZE, 0);
return TRUE;
case IDC_CHECK:
SetDlgItemText(hwndDlg, IDC_MAIL, "Vérification des mails...\r\n");
iInitWinsock();
iCheckMail();
if (iNbre_Msg > 1) {
sprintf(sMsg, "Vous avez %d nouveaux messages.\r\n", iNbre_Msg);
} else if (iNbre_Msg == 1) {
strcpy(sMsg, "Vous avez 1 nouveau message.\r\n");
} else if (!iNbre_Msg) {
strcpy(sMsg, "Vous n'avez pas de nouveaux messages.\r\n");
}
SetDlgItemText(hwndDlg, IDC_MAIL, sMsg);
return TRUE;
}

default:
return DefWindowProc(hwndDlg, uMessage, wParam, lParam);
}
}

Si kelkun pouvait m'aider, merci d'avance !

++

Alhexman

8 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 juin 2004 à 17:15
tes 'return' sont a l'envers:
WM_INITDIALOG doit retourner 1 pour bon positionnement du focus et quasi tous les autres ZERO.

hInstDlg ??? doit etre egal au 1er param de WinMain (HINSTANCE).

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
3 juin 2004 à 19:21
Ok j'ai trouvé en fait, il fallait specifier la propriété notify du static sur true...(pkoi ?)
Mais par contre, c vrai ke j'ai un ptit pb sur les valeurs kil faut retourner, si tu pouvais me donner un lien ou simplement m'expliker kel valeur mettre, jte remercie...
Et sinon, j'ai passé tout l'aprem avec une personne sur le chan #programmation a chercher pkoi, lorsk je crée la boite de dialogue IDD_DIALOG2, celle ci ne fonctionne pas, elle reste "glacée", si tu as deja rencontré ce type de pb, joré aimé avoir une explication paske jsuis o bord de la crise...
Jte remercie BruNews pour toute l'aide ke tu me fournis...

++

Alhexman
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 juin 2004 à 19:31
"glacée", KessAdir ???

faudrait voir le prob depuis son appel jusqu'a sa dlgProc, tant de possibilites.
Les valeurs a retourner sont toujours indiquees dans MSDN et Petzold l'explique clairement. Quand tu as un doute, suffit de regarder une source pour avoir bien souvent la solution.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
3 juin 2004 à 19:45
jte poste la dlgproc et l'appel (la creation de la dialog box) :

LRESULT CALLBACK OptionDlgProc(HWND hwndDlgOpt, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
char sBuffer[40];

switch (uMessage) {
case WM_COMMAND:
switch (wParam) {
case IDOK:
//Recupere le serveur pop
GetDlgItemText(hwndDlgOpt, IDE_POP, sPop, sizeof sPop);
//Recupere le nom d'utilisateur
GetDlgItemText(hwndDlgOpt, IDE_USER, sBuffer, sizeof sBuffer);
sprintf(sCmd[0], "USER %s\r\n", sBuffer);
//Recupere le mot de passe
GetDlgItemText(hwndDlgOpt, IDE_PASS, sBuffer, sizeof sBuffer);
sprintf(sCmd[1], "PASS %s\r\n", sBuffer);
EndDialog(hwndDlgOpt, 0);
break;
case IDCANCEL:
EndDialog(hwndDlgOpt, wParam);
break;
default:
return FALSE;
}
default:
return FALSE;
}

return TRUE;
}

et la creation ki se fait a partir de la dlgproc d'une autre dialog box :

case IDC_OPTION:
DialogBox(hInstDlg, (LPCTSTR)IDD_DIALOG2, hwndDlg, (DLGPROC)OptionDlgProc);
break;

Voila, j'ai bien regardé, mais j'espere ke tu trouvera kelk chose !

++

Alhexman
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 juin 2004 à 20:06
return TRUE; pour WM_INITDIALOG !!!
change deja cela.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
4 juin 2004 à 08:39
Ca ne change rien, j'ai testé l'appel d'une messagebox, mais la aussi la msgbox reste glacé, sans pomper les ressources, donc le prog ne plante pas, mais il est impossible de cliker sur un bouton ni mm sur la 'croix'...
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
4 juin 2004 à 20:52
J'ai trouvé mon "erreur", dans le

switch(Message) { ...
default:
return DefWindowProc(hwnd, message, wparam, lparam);

j'ai remplacé par return FALSE; et tt marche nickel...

Mais bon, c bizar car dans tt les tuts trouvé, jvoyais ca !

++

ALhexman
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juin 2004 à 20:57
DefWindowProc sur une dialogbox ?!?! risquait effectivement pas d'aller.

ciao...
BruNews, Admin CS, MVP Visual C++
0
Rejoignez-nous