[C win32] DialogBox qui ne s'affiche pas

cs_FineLizzyX Messages postés 9 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 25 juin 2011 - 23 juin 2011 à 23:28
cs_FineLizzyX Messages postés 9 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 25 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.

Merci pour vos lumières...

3 réponses

cs_FineLizzyX Messages postés 9 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 25 juin 2011
23 juin 2011 à 23:30
La phrase sur le thème est une question, pas une affirmation ; j'ai oublié le ?
0
cs_FineLizzyX Messages postés 9 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 25 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...

Merci d'avance !
0
cs_FineLizzyX Messages postés 9 Date d'inscription jeudi 4 août 2005 Statut Membre Dernière intervention 25 juin 2011
25 juin 2011 à 21:37
Trouvé !
Plein de choses à faire !
- Dans le programme principal :
#include <commctrl.h>
#pragma comment(lib, "comctl32.lib");

- Dans la fonction WinMain :
InitCommonControls();

- Dans les options du linker :
-lcomctl32
J'ai en fait ajouté comctl32 dans la liste des librairies à linker.

Merci pour votre écoute !!

^_^
0
Rejoignez-nous