[vc++]Creer ses fenetres a partir de dialogbox[C]

Résolu
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013 - 8 déc. 2005 à 19:48
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013 - 8 déc. 2005 à 21:07
Bonsoir,

en ce moment j'essai de me simplifier la vie en apprenant a creer mes fenetre avec visual c++ en creant des dialogbox via les ressources et ainsi passer tres peu de temps a faire le design du programme, cependant je ne sais pas quoi mettre dans mon fichier .cpp afin d'afficher ma DialogBox et non pas de fenetre principal ou autre, quelqu'un peu t'il me poster un exemple pour afficher par exemple une dialogbox dont l'ID serait IDC_MAIN

(programmation en C)

6 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 déc. 2005 à 20:18
Si tu regardes MSDN, tu vois que DlgProc doit être INT_PTR CALLBACK.
Ensuite, la boules de messages ne sert a rien, ainsi que le PostQuitMessage par conséquent.
Ton hwnd ne sert à rien, c'est pour spécifier la fenêtre parent du dialogue:

#include <windows.h>
#include "resource.h"

INT_PTR CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hinst;

int WINAPI WinMain(HINSTANCE Instance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
DialogBox(hinst,(LPCTSTR)IDC_MAIN, 0, DlgProc);
}

/******************************************************************************/
INT_PTR CALLBACK DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_COMMAND:
if(LOWORD(wParam) == IDCANCEL)
EndDialog(hwnd, 1);
}
return 0;
}
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 déc. 2005 à 19:54
En effet, ca peut servir :)
DialogBox(hInst, (LPCTSTR)IDC_MAIN, hParentWnd, DlgProc);

DlgProc est une fonction en CALLBACK, a peu près comme pour les autres fenêtre, sauf qu'on n'appelle pas DefWindowProc
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
8 déc. 2005 à 20:10
bah j'ai essayer de faire quelque chose en regardant un peu comment cela était fait pour une fenetre mais ca ne marche quand meme pas... il y a une erreur au parametre 4 de DialogBox(), pourrait tu me rectifier le code stp :s

#include <windows.h>
#include "resource.h"

LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hinst;

int WINAPI WinMain(HINSTANCE Instance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hwnd;
MSG msg;
hinst = Instance;

DialogBox(hinst,(LPCTSTR)IDC_MAIN, hwnd, DlgProc);

if (!hwnd) return FALSE;

ShowWindow(hwnd, nCmdShow);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
/******************************************************************************/
LRESULT CALLBACK DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{

return 0;
}
case WM_CLOSE:
PostQuitMessage(0);
return 0;

}
}
.
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
8 déc. 2005 à 20:24
merci, par contre le seul probleme restant est que la DialogBox s'affiche mais sans les contours des fenetres windows (ceux en bleus sous XP par defaut) la ou il y a le titre et puis reduire, agrandir, fermer,

comment puis je résoudre ce probleme?

Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
8 déc. 2005 à 20:29
ah non c'est bon cela venait de ma DialogBox, en tout cas grand merci :D
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
8 déc. 2005 à 21:07
par contre si je fais plusieurs dialogbox, le probleme est que quand j'en ferme une, elle se ferme toute, il y a quelque chose pour empecher cela

switch (uMsg)
{
case WM_COMMAND:
switch(wParam)
{
//appel de la boite de dialogue pour decouper
case IDC_DECOUP:
DialogBox(hinst,(LPCTSTR)IDD_DIALOG1, 0, DlgProc);
return 0;
//appel de la boite de dialogue pour rassembler
case IDC_RASSEMBLE:
DialogBox(hinst,(LPCTSTR)IDD_DIALOG2, 0, DlgProc);
return 0;
//appel de la messagebox pour afficher la version
case IDC_VERS:
MessageBox(NULL,"Cutmaster Version 2.0\r\nCrée par Shadow","Version",MB_ICONINFORMATION | MB_RIGHT);
return 0;
}
0
Rejoignez-nous