cs_Xs
Messages postés368Date d'inscriptionmercredi 14 novembre 2001StatutMembreDernière intervention 1 septembre 2008
-
15 mars 2002 à 11:44
cs_Xs
Messages postés368Date d'inscriptionmercredi 14 novembre 2001StatutMembreDernière intervention 1 septembre 2008
-
17 mars 2002 à 17:46
salut !
voila, pour me simplifier la tache, j'utlise les ressources pour creer une boite de dialog (sous VC++ 6).
mais j'obtiens, lors de la compilation, le message suivant :
cs_Xs
Messages postés368Date d'inscriptionmercredi 14 novembre 2001StatutMembreDernière intervention 1 septembre 2008 15 mars 2002 à 15:56
ca marche effectivement, mais qu'en partie :
a present, le prog se compile mais j'obtien la MSGBOX suivante (surprenant !) : "windows creation failed" !!!
cs_Xs
Messages postés368Date d'inscriptionmercredi 14 novembre 2001StatutMembreDernière intervention 1 septembre 2008 15 mars 2002 à 20:14
eh bien non !
j'ai toujours "windows creation failed" !!
ca viens du fait que hwnd est trouvé comme NULL alors qu'il est déclaré la ligne au dessue par createdialog.....
Croqmort
Messages postés95Date d'inscriptionmercredi 5 décembre 2001StatutMembreDernière intervention27 juin 2006 15 mars 2002 à 23:20
hwnd = CreateDialog(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIALOG1), hwnd, (DLGPROC)WndProc); !!!!!!!!
comment c horrible :)
non mais t'as pas honte !!! j'ai cru que j'allait crever !
donc cet fenetre que tu creer a pour parent elle meme avant meme qu'elle soit creer ?
wouaouw m'etonne pas qu'elle delire :)
hwnd = CreateDialog(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)WndProc);
c mieux comme ça mais je garanti pas qu'y est pas d'autre erreur :)
jcecchi
Messages postés117Date d'inscriptionsamedi 12 janvier 2002StatutMembreDernière intervention14 janvier 20033 16 mars 2002 à 15:07
Ok, ya plusieurs chose qui ne vont pas :
>>si j'attribut une fonction a IDC_ABOUT et >>IDC_CLOSE , y'a une erreur !
Il faut ecrire #include "resource.h" et pas #include <resource.h>, sinon il va le chercher dans le repertoire "Include" de VC++.
>>la fenetre s'affiche mais uniquement si j'enleve, >>dans la dialog, la barre de progression !!
C'est normal, il faut pour que cela fonctionne utiliser les controles communs.
Etape 1 : #include <commctrl.h>
Etape 2 : inclure le fichier .lib dans les options du linker.
Etape 3 : initialiser les controles.
Tout ceci n'est pas dans ton code : la ProgressBar ne peut donc pas se creer et donc la boite de dialogue ne s'affiche pas.
Si tu veux un debut de piste va voir dans Tutoriel mon code Creation ToolBar et StatusBar.
>>RegisterClassEx(&wc);
Ici cela ne te sert a rien. Pourquoi declarer un classe de fenetre alors que tu n'en utilise pas. A supprimer.
Plusieur chose ici :
-hwnd = : hwnd est souvent reserve au fenetre, ici c'est une boite de dialogue, il est preferable d'utiliser hDlg.
-GetModuleHandle : on est ici dans WinMain, on connait donc l'instance du programme (hInstance). Autant mettre hInstance.
-..,hwnd,.. : ta boite de dialogue n'as pas de fentre parente, il faut donc mettre NULL.
-(DLGPROC)WndProc : idem que pour hwnd. Mieux vaut utiliser DlgProc.
Va faire un tour du cote de msdn aux rubriques :
Windows Functions (par CreateWindowEx)
Dialog Box Functions (par CreateDialog)
ya pleins d'info utiles.
Voila donc ton code corrige et qui fonctionne :
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDC_OK:
//Faire
break;
case IDC_CANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hdlg;
MSG Msg;
jcecchi
Messages postés117Date d'inscriptionsamedi 12 janvier 2002StatutMembreDernière intervention14 janvier 20033 16 mars 2002 à 20:23
1. #include <commctrl.h>
2. Projet->Setting->Link tu rajoutes comctl32.lib
3. Dans WinMain : InitCommonControls();
La ta dialog box doit apparaitre avec ta progress bar, et ensuite tu la controle avec
SendMessage(GetDlgItem(hDlg,ID_P),PBM_MSG,...)
ID_P etant l'id de ta progress bar et PBM_MSG le message que tu veux lui envoyer. Tu a toute la liste dans msdn en tapant PBM (ou PB).
Normalement ca doit marcher, mais je n'en ai encore jamais utilisee. A voir.