Bonjour à tous,
j'aurai voulu savoir s'il était facilement possible de sauvegarder l'état des composants d'une inteface (edit, ...) afin de recharger les valeurs en l'état après une fermeture de l'application ??
Bonjour à tous,
j'aurai voulu savoir s'il était facilement possible de sauvegarder l'état des composants d'une inteface (edit, ...) afin de recharger les valeurs en l'état après une fermeture de l'application ??
salut,
c'est quoi l'etat pour toi ? le contenu des composants ?
il suffit de serialiser le contenu .
serialisation voir faq .
en fait je voudrais sauvegarder la valeur d'un CEdit, la position d'un CWButton, la selection d'un combobox, ...
puis recharger la sauvegarde pr que l'utilisateur n'est pas tout à ce refaire après chaque relance du logiciel.
tu as un exemple de sauvegarde des controles dans le projet associé a mon tuto :
http://farscape.developpez.com/Samples/SampleSDI.zip
slt
en fait ce que je viudrais, c avoir une boucle qui scrute tous les composants de ma CDialog et pour chaque type de composant faire une action.
exemple : si je détecte que le composant est un CEdit, je choisis te sauver la valeur saisie ou si je détecte que le composant est un CWButton je sauve son état etc ...
en fait, il faudrait
- lister les composants de la CDialog
- détecter son type (CEdit, ...)
- sauvegarder ce que l'on veut selon le cas (valeur texte) et l'ID (pour faire la manip inverse)
ce que je ne sais pas trop , comment lister tous les composants et connaitre leur type ?
salut,
voila un exemple de parcours des contrôles d'une dialogue:
cette fonction régle tous les statics de la boite de dialogue en gras.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 void CTestDlgDlg::MettreStaticEnGras() { char szClassName[100]; bool bFirst=true; LOGFONT LogFont; if(!/*CFont */m_NewFont.m_hObject) { GetFont()->GetLogFont(&LogFont); LogFont.lfWeight = FW_BOLD; LogFont.lfHeight = -24; m_NewFont.CreateFontIndirect(&LogFont); } CWnd *pCtrl=GetWindow(GW_CHILD); while(pCtrl) { if(!bFirst) pCtrl = pCtrl->GetWindow(GW_HWNDNEXT); bFirst=false; if(pCtrl) { ::GetClassName(pCtrl->GetSafeHwnd(),szClassName,sizeof(szClassName)); if(!strcmp(szClassName,"Static")) { pCtrl->SetFont(&m_NewFont,FALSE); pCtrl->Invalidate(); } } } }
GetClassName permet de recuperer la classe du contrôle .
edit pour un CEdit etc ...
meri bien à toi
je vais essayer de mettre au point !
a+
slt
j'ai suvi ton exemple mais en voulant aller un peu plus loin, je bloque sur un truc
en fait j'aurai voulu avoir en paramètre la possibilité de choisir sur quelle CDialog de mon projet je scrute les composants.
Peux-tu m'indiquer la manip ? (ça doit être de faire pointer pCtrl sur la CDialog voulue)
salut,
et bien il suffit sur le parcours de depart de faire:
ou pDlgSrc est le pointeur sur la dialogue a parcourir....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CWnd *pCtrl=pDlgSrc->GetWindow(GW_CHILD);
c bien ce que j'avais essayé !
mais le p'tit soucis ce que je ne vois que les composants qui ont une variable associé et pas les autres
est-ce normal ? ou y a t'il une autre subtilié ?
quel types de controles sont ignorés ?
les controles sur lesquels je n'ai pas créé de variables : CEdit, CWButton
mais que j'accède via leurs ID
en réalité pr le CEdit c OK et pr le CWButton c plutot AfxOleControl42 que je dois recherché comme nom de class
merci encore pr ton aide précieuse !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager