Antoine
-
Modifié par Antoine le 25/04/2011 à 14:58
steph -
18 juin 2011 à 05:46
Bonjour,
Je suis en train de coder une application avec l'API de Windows sans la MFC en C. En créant un contrôle Rebar, je suis confronté à un problème que même après une journée de recherche je n'arrive pas à résoudre.
Lorsque je créé la barre, tout va bien, mais elle ne s'affiche pas.
J'ai alors testé GetLastError() qui me retourne le code 0x00000006 ERROR_INVALID_HANDLE alors que CreateWindowEx ne me retourne pas NULL !
Voici des extraits de code, j'ai mis seulement les fonctions qui me paraissais pertinantes. J'espère que je n'ai rien oublié.
Header C:
struct DONNEES_GLOBALES {
HWND hRebar_Standard;
HWND hToolBar_Standard;
};
HWND hFenetre; /* variable globale pour la fenêtre principale */
struct DONNEES_GLOBALES Donnees; /* toutes les fenêtres enfants*/
Code C :
VOID Initialiser(VOID) {
INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
icc.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES;
InitCommonControlsEx(&icc);
ZeroMemory(&Donnees, sizeof(DONNEES_GLOBALES));
hFenetre = NULL;
return;
}
VOID Creer_ReBarre(VOID) {
REBARINFO rbInfo;
HRESULT ret;
ret = GetLastError(); /* ça, c'est pour vérifier au debug : ret == S_OK */
Donnees.hRebar_Standard = CreateWindowEx(WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL, WS_CHILD|WS_VISIBLE, 0, 0, 0, 0, hFenetre, (HMENU) NULL, hInstance, NULL);
ret = GetLastError(); /* ça c'est pour vérifier au debug, et là : ret == 0x00000006 => PAS NORMAL */
/* ici : Donnees.hRebar_Standard != NULL */
if (Donnees.hRebar_Standard == NULL) {
Erreur(ERREUR_CREATION_FENETRE, TEXT("Impossible de créer la barre d'outils"), CreateWindowEx, FONCTION);
return;
}
ZeroMemory(&rbInfo, sizeof(REBARINFO));
rbInfo.cbSize = sizeof(REBARINFO);
ret = SendMessage(Donnees.hRebar_Standard, RB_GETBARINFO, 0, (LPARAM) &rbInfo);
/* ici ret == S_FALSE */
ret = GetLastError(); /* ret == 0x00000006 ici aussi */
return;
}
Voila, dans l'ordre, la fenetre principale est créée, donc dans ces fonctions hFenetre est toujours valide.
Erreur est une fonction définie ailleurs qui affiche un message d'erreur.
Ensuite, normalement j'ajoute une toolbar dans la Rebar, mais je ne l'ai pas mis car la rebar toute seule ne fonctionne déjà pas.
Lorsque j'insère la ToolBar, celle-ci est affichée correctement mais pas la Rebar.
Tout le code se compile correctement donc, s'il y a une erreur, c'est moi qui ai mal recopier mon code. J'ai bien sur inclu <CommCtrl.h> et lier "Comctl32.lib".
tu peux demander sur le newsgroup professionnel des apis Win32 :
news://nntp.aioe.org/fr.comp.os.ms-windows.programmation
où cela a souvent été discuté
(ou par google
https://groups.google.com/group/fr.comp.os.ms-windows.programmation/topics?hl=fr&gvc=2
Trouvez des réponses à vos questions sur les langages, les frameworks et les astuces de codage. Échangez avec d'autres développeurs passionnés pour améliorer vos compétences en programmation et rester au fait des dernières tendances du secteur.