cs_FineLizzyX
Messages postés9Date d'inscriptionjeudi 4 août 2005StatutMembreDernière intervention25 juin 2011
-
23 juin 2011 à 23:28
cs_FineLizzyX
Messages postés9Date d'inscriptionjeudi 4 août 2005StatutMembreDernière intervention25 juin 2011
-
25 juin 2011 à 21:37
Bonjour,
Voulant éviter de faire des exécutables de taille énorme, qui se traînent et qu'il faut accompagner de dll énormes elles aussi, je développe en c avec les api win 32 dans Code::Block et avec MinGW. (J'explique car j'ai vu des questions à ce sujet : je souhaite rester proche du système. Et puis, je ne me suis pas plongé dans la programmation objet).
Je rencontre un problème d'affichage d'une bête boite de dialogue.
Déclaration dans le fichier rc :
[b]IDD_NEWCOM DIALOG 0, 0, 317, 118
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_VISIBLE | WS_POPUP | WS_SYSMENU/b etc...
Dans la "callback" de la fenêtre principale, je lance DialogBox lorsque l'on appuie sur un bouton :
DialogBox(hinst, (LPCTSTR)IDD_NEWCOM, hwnd, (DLGPROC)NewCommandeProc); (j'ai essayé avec MAKEINTRESOURCE(IDD_NEWCOM) = pareil)
La "callback" de la boite dialogue est comme ceci :
[b]LRESULT CALLBACK NewCommandeProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
hfontTitre = CreateFont(-24, 0, 0, 0, 700, FALSE, FALSE, FALSE, 1, 400, 0, 0, 0, "Titre Dlg");
SendMessage(GetDlgItem(hwndDlg, IDC_STATIC100), WM_SETFONT, (WPARAM)hfontTitre, FALSE);
SetDlgItemText(hwndDlg, IDC_STATUT_COM, "EN PREPARATION");
return TRUE;
case WM_CTLCOLORSTATIC: //Pour mettre le titre en rouge
switch(GetDlgCtrlID((HWND)lParam))/b etc...
La boite de dialogue ne s'affiche pas !
Un MessageBox pour test dans le message WM_INITDIALOG ne s'affiche pas...
Curieusement, sur un autre PC sur lequel je partage ce petit développement, elle s'affiche !!
C'est le thème de Windows XP qui pose problème ; ils sont différents sur les 2 PC : l'un en thème XP, l'autre en thème win98.
cs_FineLizzyX
Messages postés9Date d'inscriptionjeudi 4 août 2005StatutMembreDernière intervention25 juin 2011 25 juin 2011 à 21:11
Bonjour,
J'ai trouvé la raison mais je ne sais pas comment résoudre.
Il s'agit de la déclaration d'un contrôle "DATETIMEPICKER" dans le fichier ressources. La compilation fonctionne mais à l'exacution le programme ne parvient pas à initialiser ce contrôle et un message de destruction de la boîte de dialogue est donc envoyé.
Que dois-je déclarer et où le déclarer pour que cette classe de contrôle soit connue à l'exécution ?
J'ai suivi la piste de la fonction "InitCommonControlsEx". Bien que l'include <commctrl.h> soit déclaré, je me fais jeter sur cette fonction et sur le type de données INITCOMMONCONTROLSEX. Je n'y comprends plus rien...