Fentre dynamique Formulaire sans MFC

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 13 sept. 2004 à 09:21
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 14 sept. 2004 à 08:27
Bonjour

j'aimerai faire une fonction avec ce proto

String fenetreDyn(const int nbChamps);

telle qu'elle ouvre une fenetre ressemblant à ceci si nbChamps=2

-------------------------------------------------------------
+ FORMULAIRE
-------------------------------------------------------------
+ A1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ A2 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+
+ Baratin explicatif
+ Suite du baratin (meme zone)
+
+
+ OK CANCEL
-------------------------------------------------------------

avec
A1 & A2 : des éléments static

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
& bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb : des zones de textes modifiables

et une zone de texte nom modifiable prenant toute la largeur de la fenetre
sur plusieurs lignes
avant les boutons OK & CANCELS

on a donc nbChamp doublets : descriptifs / zone de saisie

J'ai bien une solution en MFC, mais ça borne le nombre passé en paramètre.
Et c'est en MFC :(

On envisagera ensuite de mettre une scrollBar en limitant la taille de la fenetre
à partir d'un n donné.

Ah, j'allais oublier la valeur de retour
Dans le cas de l'exemple précédent:
"A1\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nA2\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"

Donc pour chaque doublet: En tete, tabulation, valeur, saut de ligne

(la distinction entre OK & CANCEL se fera par la levée d'une exception dans le cas du CANCEL
ou simplement par un retour de "" dans le cas du CANCEL
mais, ça c'est un détail complétement optionnel)

La difficulté de la fonction est bien évidement, pas la mise en forme
mais la création d'une fenêtre dynamique et l'affectation/récupération de ses éléments.

Merci de votre aide pour la réalisation de cette fonction.
Magicalement,

Magic Nono: l'informagicien! 8-)

23 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 sept. 2004 à 12:21
Passe tes infos dans le dernier param de DialogBoxParam ou CreateWindow.

ciao...
BruNews, Admin CS, MVP VC++
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 sept. 2004 à 12:37
plz be more specific

qd tu auras le tps...

Magic Nono: l'informagicien! 8-)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 sept. 2004 à 12:50
Une fenetre qui doit creer des champs aura bien entendu une wndProc specifique aussi, suffira donc de lire lParam dans W_CREATE ou WM_INITDIALOG et d'avoir le code qui convient.

ciao...
BruNews, MVP VC++
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 sept. 2004 à 15:48
sur...

d'où ce post....

pour en apprendre plus sur les Win32...

Et on ne va pas essayer de te rejoindre sur l'Olympe O grd BruNews...
Les plateaux devraient nous convenir...

on a juste besoin d'une corde solidement arrimée en haut pour y accéder...

Magic Nono: l'informagicien! 8-)
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 sept. 2004 à 16:01
Non mais arrete les conneries et dis ou est le prob ?

exemple:

typedef struct _CHMPS {
DWORD count;
// autres champs
} CHMPS, *PCHMPS;

WinMain ici:
CHMPS chmps;
chmps.count = 3;
DialogBoxParam(hInstance, (LPCTSTR)IDD_APP, 0, AppDlgProc, (long) &chmps);

DlgProc ici:
PCHMPS pc;
case WM_INITDIALOG:
pc = (PCHMPS) lParam;
// creer static etc en fonction du contenu lu dans pc

ciao...
BruNews, MVP VC++
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 sept. 2004 à 16:08
Je m'y remet d'ici une heure ou deux...

Hiers, je n'y suis po arrivé tt en dynamique, C tt...

Magic Nono: l'informagicien! 8-)
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 sept. 2004 à 16:10
J'en étais à definir & utiliser

DialogBoxParam
et
DialogProcfenetreDyn

Magic Nono: l'informagicien! 8-)
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 sept. 2004 à 17:05
désolé de la nulité de cette question, mais

faut donc que je crée une classe héritant de CWnd alors?

et ds cette classe, mettre un OnInitDialog etc..

ma fonction créant une instance de cette classe en l'appelant ...

Nota: je fais l'appel à cette fonction en cliquant sur un bouton dans une appli windows based

les msg sont dc pris deja en cpte pr cette fenetre...

merci

Magic Nono: l'informagicien! 8-)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 sept. 2004 à 17:50
C'etait ecrit "SANS MFC" en titre de question, alors que vient faire CWnd dans cette galere ?

ciao...
BruNews, MVP VC++
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 sept. 2004 à 17:56
C ce que je disais....

je C po faire sans MFC, dc apprend ns donc...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 sept. 2004 à 18:05
Petzold te dira tout:
http://brunews.free.fr/brunews/download/CP5.zip
http://brunews.free.fr/brunews/download/CP5Sources.zip

j'y crois pas, un grand garçon comme toi ne ferait pas une fenetre sans une tonne de biblis a la con...

ciao...
BruNews, MVP VC++
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 sept. 2004 à 18:24
;)
Je C, Je C, Petzold...

C juste un pe indigeste...

C un pe plus complexe qu'une petite fenetre ce que je ve...

merci pr les conseils déjà donnés...

Magic Nono: l'informagicien! 8-)
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
13 sept. 2004 à 18:56
Et où tu indiquerait la valeur de A1 et de A2 ?

J'ai pas trop le temps en ce moment avec les leçons et la chambre à ranger alors je verais plus tard pour le reste

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 sept. 2004 à 18:56
On y travaille,
on y travaille,

tu C ,je suis po de l'ancienne école...

Ces concepts sont de moins en moins flous mais....

C OK, G déjà ma fenêtre .... vide...

Magic Nono: l'informagicien! 8-)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 sept. 2004 à 19:04
victorcoasne> garce a un pointeur de struct tu peux passer des milliers d'informations sur seulement 32 bits et on a ainsi 1 seul PUSH sur stack.
Vitesse et efficacite....

ciao...
BruNews, MVP VC++
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 sept. 2004 à 19:19
pr l'instant:
A1 & A2 des générés
par la boite,

on s'occuperas de passer ces param plus tard

Magic Nono: l'informagicien! 8-)

_____________________________________________
code actu:
(fenetre vide) [pas belle du tt, mé en attendant mieux...]

je C po vraiement si C le mie...
C inspiré d'un tut ...

header____________________________________________

class BWindows
{
public:
bool DoModal();
BWindows();
virtual ~BWindows();
private:
HWND m_hwnd ; //handle pour la fenetre

};

src____________________________________________

#include "BWindows.h"
#include "../Bibli/BException.hpp" //gestion de l'exception... PB1 ...

BWindows::~BWindows()
{

}

#include <windows.h>
// nom de la classe en variable globale
/// Nota : de base, C po une bonne idée...
const char szClassName[ ] = "WindowsApp";

//Prototype de notre fonction d'écoute
/// Nota : TODO :faudrai en faire une fonction membre de ma classe
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*int WINAPIWinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
*/

BWindows::BWindows()
{

WNDCLASSEX wincl; //on définit une classe pour notre fenetre
//notre classe de fenetre
wincl.hInstance = NULL;//hThisInstance; //B
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; //pas de menu
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;


wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
//on enregistre notre classe et si on n'y arrive pas on quitte le programme
if (!RegisterClassEx (&wincl))
PB1("erreur à l'instanciation");
//Maintenant que notre classe de fenetre est enregistré on peut cré la fenêtre
m_hwnd = CreateWindowEx (
0, //pas important :D
szClassName, //nom de la classe
"Windows App", //nom de notre fenetre
WS_OVERLAPPEDWINDOW, //on cré une fenetre redimensionnable
CW_USEDEFAULT, //position par défault
CW_USEDEFAULT, //pareil
544, //longueur de la fenetre
375, //hauteur
HWND_DESKTOP, //fenetre mère (et non pas fille)
NULL, //notre fenetre ne contien pas de menu
NULL,// hThisInstance, //notre handle - mis à null... -B (ça doit po etre bon...)
NULL //pas important :D
);
}

//notre fonction d'écoute des messages
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) //on traite les messages avec un switch
{
case WM_DESTROY:
PostQuitMessage (0); //si on clic sur la croix :D on quitte :D
break;
default:
//si on ne recoit aucun message (ne pas modifier)
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}

bool BWindows::DoModal()
{
//retour OK ou cancel...
MSG messages; //on définit une structure de message

// on affiche notre fenetre
ShowWindow (m_hwnd, SW_SHOW
/*nFunsterStil*/
);
//on envoi les message a notre fonction d'écoute
while (GetMessage (&messages, NULL, 0, 0))
//GetMessage revoie 0 quand il recoit le message WM_QUIT
{
//compliqué...
TranslateMessage(&messages);
//c'est ici précisément qu'on envoie les messages
DispatchMessage(&messages);
}
//on quitte
// return messages.wParam;
return true;

}
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 sept. 2004 à 19:22
la plupart des com
ne st po de moi... ;)

cuisine d'assemblage... pas très propre tout ça, je sais...

Magic Nono: l'informagicien! 8-)
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
13 sept. 2004 à 20:53
Magic_Nono> Tu as tellement trainé dans les MFC que le win32 de base te semble etre autre chose que de la prog en C/C++.

BruNews t'as quasiment maché le travail. Reste plus qu'a mettre tes neuronnes en marche.

Shell
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 sept. 2004 à 21:08
Et dire que Windows peut aller si vite sans toutes ces Vtables et tout le morcellement de la memoire que tu prepares.
A ce point, je me sauve.

ciao...
BruNews, MVP VC++
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
13 sept. 2004 à 21:19
Shell>
C sur, je touche po en Win32

cointribue dc a faire avancer ce schlimblick

BruNews>
Je ne comprend po

Je bosse le Petz
mé C po rapide

Magic Nono: l'informagicien! 8-)
0
Rejoignez-nous