begin process at 2012 05 29 02:07:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[C++][MFC] Problème avec les onglets


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C++][MFC] Problème avec les onglets

mardi 1 juin 2004 à 11:18:49 | [C++][MFC] Problème avec les onglets

impress

Bonjour,
Après avoir parcouru différents forums et tutoriaux, j'ai réussi (enfin !) à créer des onglets de façon propre.
Le problème, c'est que je n'arrive pas à accéder/modifier les infos des CPropertyPage associées à la CPropertySheet que je crée.

Par exemple, je crée un onglet (CPropertySheet onglets), une page (CPropertyPage m_dlg1) dans laquelle j'ai un champ d'edit (m_champedit), et quand je lance une commande du style onglets.m_dlg1.m_champedit.SetWindowText("toto") ca me met un msg d'erreur "Debug assertion failed".
Pareil qd je veux modifier le titre de ma CPropertyPage (j'aimerais le faire de facon dynamique).

Une idée sur la source de l'erreur ??

PS : un bout de code pour voir

COnglets::COnglets(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
AddPage(&m_dlg1);
AddPage(&m_dlg2);
}

void CConfigDlg::OnBoutonConfig()
{
COnglets onglets(_T("Titre"));
onglets.m_dlg1.m_champedit.SetWindowText("test"); // ici ca merde
onglets.DoModal();
}

mercredi 2 juin 2004 à 15:01:24 | Re : [C++][MFC] Problème avec les onglets

ymca2003

Le problème, c'est que les contrôles ne sont créés que pendant l'appel à DoModal(). Avant ils n'existent pas encore et après ils n'existent plus. Il faut associer un CString à l'Edit et utiliser UpdateData(), mais bon là dessus je maitrise pas des masses. L'autre solution est de rajouter des variables à la classe COnglets, de les initialiser avant le DoModal(), puis de traiter le mesage WM_INITDIALOG avec OnInitDialog et de faire ton SetWindowText() car à ce moment les contrôles existent.

PS : j'avias mis un exemple de dialogue à onglet en utilisant Un CTabControl et des CDialog enfant indépendant poour chaque onglet :
http://www.cppfrance.com/code.aspx?ID=20735
mercredi 2 juin 2004 à 16:32:48 | Re : [C++][MFC] Problème avec les onglets

impress

Salut,
En fait j'avais deja regarde ton code en faisant des recherches sur les onglets, mais j'ai eu du mal a le recuperer, et j'ai prefere repartir de 0.

Finalement j'ai resolu mon probleme en initialisant mes onglets dans le fichier de la classe derivee de CPropertyPage, et non dans le fichier principal. Pour modifier les titres, j'ai trouve un bout de code sur developpez.com ;)
Donc dans le fichier principal je cree juste mes CPropertyPage comme ca :
COnglets onglets(_T("Toto"));
pMesOnglets=&onglets;

for (int i=0;i<nb_motifs;i++)
{
tabDlg[i]=new CDlg; // tabDlg est declare en globale
tabDlg[i]->m_psp.dwFlags |= PSP_USETITLE ; // ici je modifie le titre de facon dynamique
tabDlg[i]->m_psp.pszTitle = motif[i]->nom ;
onglets.AddPage(tabDlg[i]);
}

onglets.DoModal();


et j'initialise les propertypage comme ca (les onglets sont en fait identiques... je n'ai donc cree qu'une seule classe derivee de CPropertyPage appelee CDlg)

BOOL CDlg::OnSetActive()
{
// réglage de l'échelle des sliders
m_slider_a.SetRange(0,40);
m_slider_a.SetTicFreq(4);
m_slider_tim.SetRange(0,1000);
m_slider_tim.SetTicFreq(50);
m_slider_tit.SetRange(0,500);
m_slider_tit.SetTicFreq(50);
m_slider_tc.SetRange(0,100);
m_slider_tc.SetTicFreq(10);

// on récupère le numéro de la page CPropertyPage active dans la CPropertySheet
// pointée par 'pMesOnglets' (= &onglets)
int nid=pMesOnglets->GetActiveIndex();

// mise à jour des valeurs des sliders (lues dans motifs.vtl)
m_slider_a.SetPos(motif[nid]->amplitude);
m_slider_tim.SetPos(motif[nid]->temps_inter_motifs);
m_slider_tit.SetPos(motif[nid]->temps_trames);
m_slider_tc.SetPos(motif[nid]->temps_cycle);

return CPropertyPage::OnSetActive();
mercredi 2 juin 2004 à 23:21:17 | Re : [C++][MFC] Problème avec les onglets

ymca2003

y'a pas possibilité de faire ça dans OnInitDialog ou OnCreate car je pense que ça serait mieux là. OnSetActive risque d'être apelée plusieures fois si ton appli passe au second plan puis revient devant. Phénomène à tester toutefois car je n'en suis pas très sûr.
mercredi 2 juin 2004 à 23:35:51 | Re : [C++][MFC] Problème avec les onglets

impress

Effectivement, le probleme c'est que je mets a jour mes onglets a chaque fois que l'utilisateur en change (je mets a jour les motif[i] presents dans le code... et OnInitDialog n'intervient qu'une fois au lancement de la fenetre, pas apres, si ?

Bon ceci dit l'appli que j'ai codee me sert uniquement comme outil pour tester un prototype, donc qd je la lance, elle ne passe jamais au second plan (en gros je code un peu sale , vu que je suis pas programmeur a la base héhé).
jeudi 3 juin 2004 à 00:20:35 | Re : [C++][MFC] Problème avec les onglets

ymca2003


OnInitDialog et OnCreate ne sont appelée qu'une seule fois à la création respectivent d'un dialogue (ou d'un dialogue enfant ce qui est le cas des propertysheetpage je pense) et d'une fenêtre


Cette discussion est classée dans : problème, code, onglets, cpropertypage, dlg1


Répondre à ce message

Sujets en rapport avec ce message

Titre des CPropertyPage [ par garslouche ] Bonjour,j'ai une fenêtre à onglets (CPropertySheet) dont l'un des onglets concerne la langue du logiciel.Je voudrais que si on change la langue en qu' If problème [ par Hades53 ] J'ai un problème avec If :char*variable1;variable1 = "bonjour";if (variable1 == "bonjour") cout < Petit problème de code [ par mimyne ] Bonjour g le code suivant:void Resultat_Clicked(Object* pSender, EventArgs* pArgs){ int operation = 5; char* chaine[10]; if (pSender == Btnres) { //o Problème de code en c++ (fonction itoa) [ par mimyne ] voila g le code suivant:void Resultat_Clicked(Object* pSender, EventArgs* pArgs){ int operation = 5; char* chaine[2]; if (pSender == Btnres) { { ito Problème : Récupération des données d'un Buffer pour mettre dans une EditBox [ par Memerosti ] BonjourMon problème est le suivant : J'ai ouvert un fichier, lu ses données, et jusque là ça va. Mais ensuite je voudrais récupérer ces données, pour CPropertyPage MFC [ par Helau ] Bonjour,J'ai un souci avec les PropertyPage.J'ai une application qui conteint environ 25 onglets. Ces onglets ont plusieurs propriétés communes. Je vo (MS VCpp) Problème de variables [ par YS1 ] J'ai créé une DLL C+PP que je souhaite utiliser dans un programe VB.La fonction principale de la DLL renvoie un certain nombre de variables, qui sont problème d'enregistrement de variables à partir d'une base de données Access [ par maevasa ] bonjour j'ai un problème avec ce bout de code quand je compile mon programme tout marche mais c'est au lancement de l'exe qu'il plante que dire de plu Dialogue à onglets [ par bzouli ] Bonjour,j'ai un problème: je veux faire une boite de dialogue avec 2 onglets, et ce n'est vraiment pas intuitif en VC++ !!J'ai créer mes deux classes Problème de link : LNK2001 [ par oberown ] J'utilise une API, dont j'utilise les variables.Je n'ai aucun problème pour les utiliser. Or quand je veux en utiliser une celle ci IID_IRTCUserSearch


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 : 0,437 sec (4)

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