racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 29 nov. 2008 à 12:20
Tu as raison, il parait que GetWindowLong() ne marche pas avec les boites de dialogue. Je vais voir comment obtenir l'identificateur autrement.
Pour le 2e CALLBACK, copie el code de la procédure DlgProc et colle le quelque part puis renomme en DlgProc2. Puis tu fais:
DialogBox(0,MAKEINTRESOURCE(IDD_DIALOG2), hdlg, DlgProc2);
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 27 nov. 2008 à 21:56
Salut,
Normalement, cela ne peut arriver que si les deux fenêtres ont la même procédure. Si c'est voulu, il ne faudra dessiner le rectangle que pour celle ayant comme identificateur IDD_DIALOG1. Tu peux récupérer ce dernier grâce à GetWindowLong(hwnd,GWL_ID). Sinon, chaque fenêtre doit avoir sa propre procédure. Ainsi, le message WM_PAINT sera traité différemment dans chaque procédure.
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,
int nShowCmd)
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgProc);
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 29 nov. 2008 à 10:50
Tu utilises effectivement une seule procédure (DlgProc) pour les deux boites de dialogue. Tu peux faire comme ceci:
case WM_PAINT:
{
ULONG id=GetWindowLong(hdlg, GWL_ID);
if(id==IDD_DIALOG1) break;
//....
DeleteObject(BrushBlack); // Pour détruire le BRUSH
break;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
F0ra
Messages postés111Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention29 décembre 2008 29 nov. 2008 à 11:22
Je te remercie de m'avoir répondu.
Il y a toujours le rectangle qui s'affiche dans les 2 Forms.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Certainement un petit truc qui ne va pas.
J'ai essayé plusieurs chose comme changer:
if(id==IDD_DIALOG1) break; par if(id==IDD_DIALOG2) break;
if(id==IDD_DIALOG1) break; par if(id==IDD_DIALOG1) { Rectangle(hdc, ...}
etc..
Et je ne vois pas d'ou vient le problème. Le paramétrage de GetWindowLong ?
case
WM_PAINT:
{
ULONG id=GetWindowLong(hdlg, GWL_ID);