begin process at 2012 05 27 21:15:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > VC/MFC - GESTION DE CTABCTRL - GESTION D'ONGLETS

VC/MFC - GESTION DE CTABCTRL - GESTION D'ONGLETS


 Information sur la source

Note :
Aucune note
Catégorie :API Classé sous :CTabCtrl, onglet, Dialog Niveau :Expert Date de création :04/11/2004 Date de mise à jour :16/08/2009 08:14:31 Vu / téléchargé :11 265 / 823

Auteur : magic_Nono

Ecrire un message privé
Site perso
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

j'ai plutot mis longtemps à gérer les onglets correctements
Le pb est d'avoir une table a onglets sur un dialog box
et cet table à onglet ne couvrant qu'une partie de la boite de dialogue


aujourd'hui, qqn me pose la question, voici la réponse que je lui est faite (explications orales en moins)

ci dessous figure un brouillon de source qui sera repris ultérieurement.


Un exemple concret est dans le fichier joint

la procédure donnée si dessous y a été simplifiée
En plus, il montre des choses amusantes comme le fait que l'on puisse y rendre cachées les sous boites.... avec IDOK et IDCANCEL

Bonne prog

Source

  • 1 Créer nun obj graphiq tab CTRL
  • lui associer une var de ctrl CTabCTRL
  • 2 Créer une boite pr les sous fenetres
  • style : Child & NoBordered
  • more style : control
  • 3 Créer les classes associées aux sous fenetres
  • sachant que leur constructeur doit initialiser un ptr sur la classe mere
  • (simplification gestion des CTRL au sein de la sous classe)
  • DChoixTraitement::DChoixTraitement(CWnd* pParent/*=NULL*/):CDialog(DChoixTraitement::IDD, pParent)
  • {
  • /// -----------------------------------------------------------------------------------
  • /// ---------------- DChoixTraitement::DChoixTraitement(CWnd* pParent) ----------------
  • /// -----------------------------------------------------------------------------------
  • /// ----- Objectif : Constructeur de la classe : DChoixTraitement
  • /// ----- Auteur(s) : Magic_Nono 07/07/04
  • /// ----- PostCond : Toutes les variables de la classe doivent être instanciées avec une valeur par défaut ou contextuelle
  • /// -----------------------------------------------------------------------------------
  • /// ----- CWnd* pParent(par défaut : 'NULL') : pointeur sur la fenetre mère
  • /// -----------------------------------------------------------------------------------
  • //{{AFX_DATA_INIT(DChoixTraitement)
  • m_cTraceCode=FALSE;
  • m_cRepartitCode=FALSE;
  • m_cMiseEnForme=FALSE;
  • m_cCommenteCode=FALSE;
  • m_bCommenterManuellement = FALSE;
  • //}}AFX_DATA_INIT
  • m_pFPrinc=(DMetaProgPrinc*)pParent;
  • }
  • Permettre aux fenetres de se détrure en fin de prog
  • avec une fonction PostNcDestroy
  • appellée ainsi
  • avec le classwizard en méthode prédéfinie de la classe
  • dont voici le détail
  • void DChoixTraitement::PostNcDestroy()
  • {
  • /// -------------------------------------------------------------------
  • /// ---------------- DChoixTraitement::PostNcDestroy() ----------------
  • /// -------------------------------------------------------------------
  • /// ----- Objectif : Appelé à la destruction de la fenetre
  • /// ----- Auteur(s) : Magic_Nono 10/08/04
  • /// ----- PreCond : /
  • /// ----- PostCond : /
  • /// -------------------------------------------------------------------
  • //fonction appelée à la destruction de la fenetre mere
  • // TODO: Add your specialized code here and/or call the base class
  • CDialog::PostNcDestroy();
  • delete(this);
  • }
  • 4 ds la cl princ
  • mettre un pointeur par sous fenetre (var membre)
  • ds OnInitDialog
  • initialiser les onglets
  • c_tabChoixTrtt.DeleteAllItems();
  • /// Algo : init titres
  • ///nota : pb possible en mode release : soluce :
  • ///+ char titre[50]
  • ///+ strcpy(titre,"yyyyyyyy");
  • ///+ tabCtrlItem.pszText = titre;
  • BString plomp;
  • // TC_ITEM tabCtrlItem;
  • // tabCtrlItem.mask=TCIF_TEXT;
  • plomp=BLang::getTxtLangue("choixTraitement",false);
  • // tabCtrlItem.pszText=plomp;
  • c_tabChoixTrtt.InsertItem( 0,plomp);
  • plomp=BLang::getTxtLangue("choixNettoyage",false);
  • // tabCtrlItem.pszText=_T(plomp);
  • c_tabChoixTrtt.InsertItem( 1,plomp );
  • // tabCtrlItem.pszText=_T(plomp);
  • c_tabChoixTrtt.InsertItem( 2,BLang::getTxtLangue("choixInfo",false) );
  • // tabCtrlItem.pszText=_T(plomp);
  • c_tabChoixTrtt.InsertItem( 3,BLang::getTxtLangue("choixAssistant",false) );
  • // tabCtrlItem.pszText=_T(plomp);
  • c_tabChoixTrtt.InsertItem( 4,BLang::getTxtLangue("choixAide",false) );
  • pour chaque sous fenetre, créer une instance
  • m_pChoixDeveloppement=new DChoixDevel(this);
  • m_pChoixDeveloppement->Create(IDD_DCHOIX_DEVELOPPEMENT,this);
  • m_pChoixDeveloppement->ShowWindow(SW_HIDE);
  • positionner la fenêtre
  • /// Algo : init sous fenetres (positionnement)
  • {
  • //getSystemMetric
  • CRect rectTab;
  • c_tabChoixTrtt.GetWindowRect(&rectTab);
  • ScreenToClient(&rectTab);
  • rectTab.left+=5;
  • rectTab.top+=25;
  • unsigned int largeur=rectTab.Width()-10,hauteur=rectTab.Height()-10;
  • m_pChoixDeveloppement->SetWindowPos(NULL, rectTab.left , rectTab.top, largeur, hauteur, SWP_NOZORDER);
  • m_pChoixTraitement->SetWindowPos(NULL, rectTab.left , rectTab.top, largeur, hauteur, SWP_NOZORDER);
  • m_pChoixInfo->SetWindowPos(NULL, rectTab.left , rectTab.top, largeur, hauteur, SWP_NOZORDER);
  • }
  • gérer les affichages
  • m_pChoixDeveloppement->ShowWindow(iTraitement==3?SW_SHOW:SW_HIDE);
  • initialiser l'onglet courent
  • c_tabChoixTrtt.SetCurSel(tmp);
  • récupérer l'evt sur modification ds le tabCTRL
  • BOOL DMetaProgPrinc::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
  • {
  • /// ----------------------------------------------------------------------------------------------------------------
  • /// ---------------- DMetaProgPrinc::OnNotify(WPARAM wParam ,LPARAM lParam ,LRESULT* pResult) -> BOOL ----------------
  • /// ----------------------------------------------------------------------------------------------------------------
  • /// ----- Objectif : action... pour la récup de cht d'onglet
  • /// ----- Auteur(s) : Magic_Nono 10/08/04
  • /// ----- PreCond : 1 evt récupéré
  • /// ----- PostCond : /
  • /// ----------------------------------------------------------------------------------------------------------------
  • /// ----- WPARAM wParam : TODO
  • /// ----- LPARAM lParam : paramètre complémentaire
  • /// ----- LRESULT* pResult : TODO
  • /// ----------------------------------------------------------------------------------------------------------------
  • /// ----- retour (BOOL) : cf.obj
  • /// ----------------------------------------------------------------------------------------------------------------
  • // UpdateData(true);
  • if(wParam==IDC_TAB_SELECTION_TRAITEMENT)
  • {
  • NMHDR*plomp=(NMHDR*)lParam;
  • if(plomp->code==TCN_SELCHANGE)
  • majChoix();
  • }
  • return CDialog::OnNotify(wParam, lParam, pResult);
  • }
  • et le gérer
  • void DMetaProgPrinc::majChoix()
  • {
  • /// ----------------------------------------------------------
  • /// ---------------- DMetaProgPrinc::majChoix() ----------------
  • /// ----------------------------------------------------------
  • /// ----- Objectif : cht de la sélection du tab CTRL
  • /// ----- Auteur(s) : Magic_Nono 10/08/04
  • /// ----- PreCond : /
  • /// ----- PostCond : /
  • /// ----------------------------------------------------------
  • int iTraitement=c_tabChoixTrtt.GetCurSel();
  • m_pChoixTraitement->ShowWindow(iTraitement<=1?SW_SHOW:SW_HIDE);
  • if(iTraitement<=1)
  • {
  • m_pChoixTraitement->active(iTraitement==0);
  • }
  • else
  • {
  • m_pChoixTraitement->ShowWindow(SW_HIDE);
  • }
  • m_pChoixInfo->ShowWindow(iTraitement==2?SW_SHOW:SW_HIDE);
  • m_pChoixDeveloppement->ShowWindow(iTraitement==3?SW_SHOW:SW_HIDE);
  • c_aide.ShowWindow(iTraitement==4?SW_SHOW:SW_HIDE);
  • UpdateData(false);
  • majAffichage();
  • }
  • ____
  • nota d mon prog, je gère les affichages ainsi... (fonction tronquée des élts ne concernant pas la gestion d'onglet : gestion menus....)
  • void DMetaProgPrinc::majAffichage()
  • {
  • /// --------------------------------------------------------------
  • /// ---------------- DMetaProgPrinc::majAffichage() ----------------
  • /// --------------------------------------------------------------
  • /// ----- Objectif : Mise à jours des éléments de la fenêtre accessibles ou non
  • /// ----- Explic : 1 check extention & 2 maj Affichage
  • /// ----- Auteur(s) : Magic_Nono 05/09/03
  • /// ----- PreCond : /
  • /// ----- PostCond : /
  • /// --------------------------------------------------------------
  • UpdateData(true);
  • try
  • {
  • if(m_pChoixInfo==NULL ||m_pChoixDeveloppement==NULL ||m_pChoixTraitement==NULL)
  • /// algo : sécu
  • return;
  • /// algo : MaJ ext-> int
  • m_pChoixDeveloppement->UpdateData(true);
  • m_pChoixInfo->UpdateData(true);
  • m_pChoixTraitement->UpdateData(true);
  • /// algo : SI un langage traité
  • if(m_iLangage!=LANGAGE_AUCUN)
  • {
  • int iTraitement=c_tabChoixTrtt.GetCurSel();
  • if(iTraitement!=2)
  • m_pChoixInfo->desactive();
  • if(iTraitement!=3)
  • m_pChoixDeveloppement->desactive();
  • if(iTraitement>1)
  • m_pChoixTraitement->desactive();
  • ///algo : SI mode développement ss fichier & pas développement ni aide
  • if(developpementSeuls && iTraitement!=3 && iTraitement!=4) //pas aide ou dvt ...
  • {
  • ///algo : warning puis (*)
  • c_launch.EnableWindow(false);
  • return;
  • }
  • switch(iTraitement)
  • {
  • case 0: //traiter
  • case 1: //nettoyer
  • c_launch.EnableWindow(m_pChoixTraitement->active(iTraitement==0));
  • break;
  • case 2: //information
  • c_launch.EnableWindow(m_pChoixInfo->active());
  • break;
  • case 3: //développer - wizards
  • c_launch.EnableWindow(m_pChoixDeveloppement->active(developpementSeuls ,m_cAvecHeader==TRUE));
  • }
  • }
  • ...
  • /// algo : Mise à jour des fenetres
  • m_pChoixDeveloppement->UpdateData(false);
  • m_pChoixInfo->UpdateData(false);
  • m_pChoixTraitement->UpdateData(false);
  • }
  • TRAITE_EXCEPTION_B;
  • UpdateData(false);
  • }
1 Créer nun obj graphiq tab CTRL

	lui associer une var de ctrl CTabCTRL

2 Créer une boite pr les sous fenetres
	style 		:	Child & NoBordered
	more style	:	control
	
3 Créer les classes associées aux sous fenetres
	sachant que leur constructeur doit initialiser un ptr sur la classe mere
		(simplification gestion des CTRL au sein de la sous classe)
		
						
				DChoixTraitement::DChoixTraitement(CWnd* pParent/*=NULL*/):CDialog(DChoixTraitement::IDD, pParent)
				{
				/// -----------------------------------------------------------------------------------
				/// ---------------- DChoixTraitement::DChoixTraitement(CWnd* pParent) ----------------
				/// -----------------------------------------------------------------------------------
				/// -----  Objectif	: Constructeur de la classe : DChoixTraitement
				/// -----  Auteur(s)	: Magic_Nono 07/07/04
				/// -----  PostCond	: Toutes les variables de la classe doivent être instanciées avec une valeur par défaut ou contextuelle
				/// -----------------------------------------------------------------------------------
				/// -----  CWnd* pParent(par défaut : 'NULL')	: pointeur sur la fenetre mère
				/// -----------------------------------------------------------------------------------
					//{{AFX_DATA_INIT(DChoixTraitement)
					m_cTraceCode=FALSE;
					m_cRepartitCode=FALSE;
					m_cMiseEnForme=FALSE;
					m_cCommenteCode=FALSE;
					m_bCommenterManuellement = FALSE;
					//}}AFX_DATA_INIT
					m_pFPrinc=(DMetaProgPrinc*)pParent;
				}
		
		Permettre aux fenetres de se détrure en fin de prog
			avec une fonction PostNcDestroy
			appellée ainsi
				avec le classwizard en méthode prédéfinie de la classe
			dont voici le détail
				void DChoixTraitement::PostNcDestroy()
				{
				/// -------------------------------------------------------------------
				/// ---------------- DChoixTraitement::PostNcDestroy() ----------------
				/// -------------------------------------------------------------------
				/// -----  Objectif	: Appelé à la destruction de la fenetre
				/// -----  Auteur(s)	: Magic_Nono 10/08/04
				/// -----  PreCond	: /
				/// -----  PostCond	: /
				/// -------------------------------------------------------------------
					//fonction appelée à la destruction de la fenetre mere
					// TODO: Add your specialized code here and/or call the base class
					CDialog::PostNcDestroy();
					delete(this);
				}

				

4 ds la cl princ
	mettre un pointeur par sous fenetre (var membre)
	
	ds OnInitDialog
			initialiser les onglets
			
					c_tabChoixTrtt.DeleteAllItems();
					/// Algo : init titres
					///nota : pb possible en mode release : soluce :
					///+	char titre[50]
					///+	strcpy(titre,"yyyyyyyy");
					///+	tabCtrlItem.pszText = titre;
					BString plomp;
					//	TC_ITEM tabCtrlItem;
					//	tabCtrlItem.mask=TCIF_TEXT;
					plomp=BLang::getTxtLangue("choixTraitement",false);
					//	tabCtrlItem.pszText=plomp;
					c_tabChoixTrtt.InsertItem( 0,plomp);
					plomp=BLang::getTxtLangue("choixNettoyage",false);
					
					//		tabCtrlItem.pszText=_T(plomp);
					c_tabChoixTrtt.InsertItem( 1,plomp );
					//		tabCtrlItem.pszText=_T(plomp);
					c_tabChoixTrtt.InsertItem( 2,BLang::getTxtLangue("choixInfo",false) );
					//		tabCtrlItem.pszText=_T(plomp);
					c_tabChoixTrtt.InsertItem( 3,BLang::getTxtLangue("choixAssistant",false) );
					//		tabCtrlItem.pszText=_T(plomp);
					c_tabChoixTrtt.InsertItem( 4,BLang::getTxtLangue("choixAide",false) );


		pour chaque sous fenetre, créer une instance
				m_pChoixDeveloppement=new DChoixDevel(this);
				m_pChoixDeveloppement->Create(IDD_DCHOIX_DEVELOPPEMENT,this);
				m_pChoixDeveloppement->ShowWindow(SW_HIDE);
		
		positionner la fenêtre
			/// Algo : init sous fenetres (positionnement)
			{
				//getSystemMetric
				CRect rectTab;
				c_tabChoixTrtt.GetWindowRect(&rectTab);
				ScreenToClient(&rectTab);
				rectTab.left+=5;
				rectTab.top+=25;
				unsigned int largeur=rectTab.Width()-10,hauteur=rectTab.Height()-10;
				m_pChoixDeveloppement->SetWindowPos(NULL, rectTab.left , rectTab.top, largeur, hauteur, SWP_NOZORDER);
				m_pChoixTraitement->SetWindowPos(NULL, rectTab.left , rectTab.top, largeur, hauteur, SWP_NOZORDER);
				m_pChoixInfo->SetWindowPos(NULL, rectTab.left , rectTab.top, largeur, hauteur, SWP_NOZORDER);
			}



		gérer les affichages
			m_pChoixDeveloppement->ShowWindow(iTraitement==3?SW_SHOW:SW_HIDE);

		initialiser l'onglet courent
			c_tabChoixTrtt.SetCurSel(tmp);

	récupérer l'evt sur modification ds le tabCTRL
			BOOL DMetaProgPrinc::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
			{
			/// ----------------------------------------------------------------------------------------------------------------
			/// ---------------- DMetaProgPrinc::OnNotify(WPARAM wParam ,LPARAM lParam ,LRESULT* pResult) -> BOOL ----------------
			/// ----------------------------------------------------------------------------------------------------------------
			/// -----  Objectif	: action... pour la récup de cht d'onglet
			/// -----  Auteur(s)	: Magic_Nono 10/08/04
			/// -----  PreCond	: 1 evt récupéré
			/// -----  PostCond	: /
			/// ----------------------------------------------------------------------------------------------------------------
			/// -----  WPARAM wParam	: TODO
			/// -----  LPARAM lParam	: paramètre complémentaire
			/// -----  LRESULT* pResult	: TODO
			/// ----------------------------------------------------------------------------------------------------------------
			/// -----  retour (BOOL)	: cf.obj
			/// ----------------------------------------------------------------------------------------------------------------
				//	UpdateData(true);
				if(wParam==IDC_TAB_SELECTION_TRAITEMENT)
				{
					NMHDR*plomp=(NMHDR*)lParam;
					if(plomp->code==TCN_SELCHANGE)
						majChoix();
				}
				return CDialog::OnNotify(wParam, lParam, pResult);
			}
		
		et le gérer
			
			void DMetaProgPrinc::majChoix()
			{
			/// ----------------------------------------------------------
			/// ---------------- DMetaProgPrinc::majChoix() ----------------
			/// ----------------------------------------------------------
			/// -----  Objectif	: cht de la sélection du tab CTRL
			/// -----  Auteur(s)	: Magic_Nono 10/08/04
			/// -----  PreCond	: /
			/// -----  PostCond	: /
			/// ----------------------------------------------------------
				int iTraitement=c_tabChoixTrtt.GetCurSel();
				m_pChoixTraitement->ShowWindow(iTraitement<=1?SW_SHOW:SW_HIDE);
				if(iTraitement<=1)
				{
					m_pChoixTraitement->active(iTraitement==0);
				}
				else
				{
					m_pChoixTraitement->ShowWindow(SW_HIDE);
				}
				m_pChoixInfo->ShowWindow(iTraitement==2?SW_SHOW:SW_HIDE);
				m_pChoixDeveloppement->ShowWindow(iTraitement==3?SW_SHOW:SW_HIDE);
				c_aide.ShowWindow(iTraitement==4?SW_SHOW:SW_HIDE);
				UpdateData(false);
				majAffichage();
			}




____
nota d mon prog, je gère les affichages ainsi... (fonction tronquée des élts ne concernant pas la gestion d'onglet : gestion menus....)


void DMetaProgPrinc::majAffichage()
{
/// --------------------------------------------------------------
/// ---------------- DMetaProgPrinc::majAffichage() ----------------
/// --------------------------------------------------------------
/// -----  Objectif	: Mise à jours des éléments de la fenêtre accessibles ou non
/// -----  Explic		: 1 check extention & 2 maj Affichage
/// -----  Auteur(s)	: Magic_Nono 05/09/03
/// -----  PreCond	: /
/// -----  PostCond	: /
/// --------------------------------------------------------------
	UpdateData(true);
	try
	{
		if(m_pChoixInfo==NULL ||m_pChoixDeveloppement==NULL ||m_pChoixTraitement==NULL)

			/// algo : sécu
			return;
		/// algo : MaJ ext-> int
		m_pChoixDeveloppement->UpdateData(true);
		m_pChoixInfo->UpdateData(true);
		m_pChoixTraitement->UpdateData(true);
		
		/// algo : SI un langage traité
		if(m_iLangage!=LANGAGE_AUCUN)
		{
			int iTraitement=c_tabChoixTrtt.GetCurSel();
					if(iTraitement!=2)
				m_pChoixInfo->desactive();
			if(iTraitement!=3)
				m_pChoixDeveloppement->desactive();
			if(iTraitement>1)
				m_pChoixTraitement->desactive();
			///algo : SI mode développement ss fichier & pas développement ni aide
			if(developpementSeuls && iTraitement!=3 && iTraitement!=4)	//pas aide ou dvt ...
			{
				///algo : warning puis (*)
				c_launch.EnableWindow(false);
				return;
			}
			switch(iTraitement)
			{
			case 0:	//traiter
			case 1:	//nettoyer
c_launch.EnableWindow(m_pChoixTraitement->active(iTraitement==0));
				break;
			case 2:	//information
				c_launch.EnableWindow(m_pChoixInfo->active());
				break;
			case 3:	//développer - wizards
				c_launch.EnableWindow(m_pChoixDeveloppement->active(developpementSeuls ,m_cAvecHeader==TRUE));
		}
	}
... 
/// algo : Mise à jour des fenetres
	m_pChoixDeveloppement->UpdateData(false);
	m_pChoixInfo->UpdateData(false);
	m_pChoixTraitement->UpdateData(false);
	}
	TRAITE_EXCEPTION_B;
	UpdateData(false);
}


 Conclusion

cette version fonctionne sans problème avec VC6


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

05 novembre 2004 15:34:20 :
fonction majAffichage() rajjoutée
05 novembre 2004 16:24:08 :
positionnement à ne pas ommettre... sinon, évidemment, rien ne s'affiche !!
09 novembre 2004 19:03:49 :
exemple ajouté
16 août 2009 08:14:32 :
Mise en forme

 Sources du même auteur

Source avec Zip [MFC] BCOMBOBOX & BLISTBOX
Source avec Zip Source avec une capture [ C++ WIN32 ] REMPLISSAGE DE FICHE - FENETRE DYNAMIQUE
Source avec Zip Source avec une capture WIN32 - MFC - VC6 - PLACE D'UNE APPLI : BARRE DES TACHES OU ...
Source avec Zip [WIN32] [VC6] BOITE À CHOIX MULTIPLE PAR BOUTONS
Source avec Zip TEMPLATE DE DIALOG/FENETRE (VC++)

 Sources de la même categorie

Source avec Zip WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture BOÎTE DE DIALOGUE DE PROGRESSION AVEC ANNULATION par racpp
Source avec Zip Source avec une capture ONGLETS MULTICOLORES (WIN32 API) par racpp
Source avec Zip Source avec une capture GALAWA, ÉDITEUR DE SCRIPTS MIRC (+ CRÉATEUR DE PICWINS ET DI... par uaip
Source avec Zip Source avec une capture CALCULER SES MOYENNES par uaip
Source avec Zip CTABCTRLEX SIMPLISIME par kts_system

Commentaires et avis

Commentaire de AlexMAN le 04/11/2004 22:10:24

Personnellement, je trouve cette gestion bocou plus simple en API, mais alors vraiment plus simple...
Enfin, c une kestion de gout ;)

++

Commentaire de magic_Nono le 05/11/2004 11:07:36

un exemple concret de ce que je dit est ds le prog MétaProg... dispo sur FTP & sur ce site

si tu as une meilleure soluce directement avec API
propose et donne le lien sur ton nv source

G longuement cherché et réfléchi a cette soluce avt de la réaliser

l'avantage concret que j'y voi principalement est la gestion graphique des sous fenetres de manière indépendante et l'utilisation des facilités de Visual.

donc, je t'en prie, propose et donne ta soluce en précisant le lien ici

n'oublie pas que le section onglet n'occupe qu'une partie de la fenetre principale

Merci
Bruno.

Commentaire de AlexMAN le 06/11/2004 09:49:31

En fait ce ki me derange ds ton prog c tous les '->' et compagnie, enfin la "syntaxe MFC" en gros, j'avais juste survoler ton code kan j'ai posté le commentaire, en fait c a peu pres pareil, mais serieusement, jme perds avec tt ces '->', c pour ca ke j'avais rajouté 'c une kestion de gout', paske fo aimer !
Brunews a deposé un exemple, et je risk de deposer un truc ds pas longtemps, dc si ca t'interesse tjrs...

++ nono

Commentaire de magic_Nono le 08/11/2004 09:49:02

k

C ce que je pensais en fait...

sinon, pour les indirections (->)
je penses que tu as compris que j'avais pour habitude de transmettre les param in en "const T&" et les param out en "T*"

c'est une question d'habitude

++ Alex
Nono.

Commentaire de vecchio56 le 09/11/2004 17:50:26 administrateur CS

On pourrait avoir un exemple fonctionnel s'il te plait (je suis privé de compilo...)?

Commentaire de magic_Nono le 10/11/2004 09:11:05

cf zip

Commentaire de vecchio56 le 10/11/2004 23:32:08 administrateur CS

Merci

Commentaire de jnduf le 23/03/2005 09:16:58

Trop cool, c'est exactement ce que je cherchais !
Merci

Commentaire de jnduf le 23/03/2005 11:22:00

Une dernière chose, pour éviter les fuites de mémoire, il faut absolument ajouter une libération des objets des class dialog.
Par exemple, dans la fonction DestroyWindows:
delete(m_pChoixDeveloppement)

A+

Commentaire de magic_Nono le 23/03/2005 14:32:58

merci pour ton com jnduf

pour la libération, c'est le role du PostNcDestroy

Magicalement
++
Nono.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Utilisation des CTabCtrl dans VC++ [ par tanguy_laverdure ] Bonjour,Quelqu'un aurait il deja utilisé le CTabCtrl permettant de mettre un menu a onglet dans une fenetre de dialogue ?Peut t on tout creer avec le VC++ CTabCtrl et boite de dialog [ par mortiis ] Bonjour à tous Je fais une application et j'utilise un controle CTabCtrl je réussi à avoir mes onglets avec la ligne m_cTab.InsertIt interface : désactiver onglet CTabCtrl, VC++6 [ par magic_Nono ] Bj,Est-il possible de désactiver un onglet d'un CTabCtrl(le rendre griser)comme avec EnableWindowSi ce n'est pas le cas, quelle classe utiliser si fai onglet CTabCtrl [ par gugaut13 ] Bonjour, Je viens de creer sous visual C++ une MFC en integrant un Tab control. j'ai reussi a creer les onglets, j'ai ajoute des bouton d'action mai Comment reactiver une fentre Dialog [ par enrageur ] Je programme sous visual C++ 6. je concois un petit logiciel avec des fenetres windows (fenetre Dialog par default). Voila mon probleme, j'ouvre une f Onglet et dialogue box : HELP ! [ par jbmartinez ] Voilà, je travail sur Dev c++.J'ai déjà trouvé ici des sources sur ce sujet mais étant débutant je n'est pas bien compris ce qu'il fallait que je face REsiZE Dialog [ par furiouspk ] Bonjour!!!Je Cherche Le Moyen De LimiTer Le ResiZe D'une Dialog !!Si Vous Avez Une Tite Idée La Dessus??Merci Za Vous................................. Child Dialog dans une app en MDI [ par LudovicJ ] Bonjour à tous,Je suis en train de faire une app MDI qui contient plusieurs boites de dialogue.J'arrives à insérer mes boites de dialogue sans pb. Seu directdraw et dialog box [ par mannix ] Salut à tous, je débute en c++ et j'ai un peu de mal à comprendre tous les mecanismes qui permettent de manipuler facilement le fenetres. Je voudrais InvalidateRect a fermeture d'une fenetre fille [ par AlexMAN ] Bonsoir, Voila, j'ai une ptite kestion qui me turlupine. J'ai une dialog a partir de laquelle je gere l'affichage d'autres dialogs, mais a la fermetur


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,139 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales