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

Résolu
Signaler
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013
-
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
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;
}
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
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
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013

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;

}
}
.
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013

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
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013

ah non c'est bon cela venait de ma DialogBox, en tout cas grand merci :D
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013

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;
}