
Сообщение от
zzzot
ибо, как вариант, программа будет работать с отдельным файлом(тот же caption.ini) но с возможностью сохранить в другой через диалог
Добавлено через 33 минуты
реализовал с ini файлом. подскажите как вывести сохранение и загрузку через диалоговое окно)
Выкладываю простой MFC проект, по сохранению и загрузке состояния контролов окна.
Принцип такой - при нажатии кнопки сохранить хначение контролов в
C++ |
1
| GetTempPath(MAX_PATH,sFilePath); |
|
создаю файл
CDlgCap.ini
(при желании этот файл можно редактировать самому)
При первом запуске или если не нажималась кнопка
Сохранить значения контролов окно выскакивает не инициализированным, поэтому необходимо наать кнопку
Заполнить элементы.
Можно выбирать позицую ComboBox и CheckBox-а (в программе есть несколько доп методов для работі с контролами, посмотришь сам

). Так вот после того как контролы заполняться жмём
Сохранить значения контролов, при повторном запуске программы контролы заполняться автоматом сами, чтобы их переинициализировать - сноа нажимаем
Заполнить элементы
Загрузку и выгрузку значений контролов организовал с помощью класса CDlgCap
Листинг CDlgCap.h
C++ |
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
| #include "stdafx.h"
#pragma once
class CDlgCap
{
private:
char * sFileEntry;
char sFilePath[MAX_PATH];
CString sEditText;
bool bCheck;
long lComboPos;
public:
CDlgCap();
~CDlgCap();
bool Initialize();
bool SaveCaption();
CString getFilePath();
CString getEditText();
bool getCheck();
long getComboPos();
void setEditText(CString);
void setCheck(bool);
void getComboPos(long);
}; |
|
Листинг CDlgCap.cpp
C++ |
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
| #include "stdafx.h"
#include "CDlgCap.h"
#include <stdio.h>
CDlgCap::CDlgCap()
{
GetTempPath(MAX_PATH,sFilePath);
strcat(sFilePath,"CDlgCap.ini");
sFileEntry = (char *)malloc(sizeof(char));
sEditText = "NotInitialized";
bCheck = false;
lComboPos = -1;
}
CDlgCap::~CDlgCap()
{
if(sFileEntry)
free(sFileEntry);
}
bool CDlgCap::Initialize()
{
bool bRet = false;
char * buf;
long fLen = 0;
FILE * f = fopen(sFilePath,"rb+");
if(f)
{
fseek(f,0,SEEK_END);
fLen = ftell(f);
fseek(f,0,SEEK_SET);
if(sFileEntry = (char *)realloc(sFileEntry,fLen + 1))
{
fread(sFileEntry,fLen,1,f);
sFileEntry[fLen] = '\0';
buf = strtok(sFileEntry,"\r\n");
while(buf)
{
if(strstr(buf,"EDIT_TEXT"))
sEditText = buf + strlen("EDIT_TEXT");
if(strstr(buf,"BOOLCHECK"))
if(strstr(buf,"true") || strstr(buf,"TRUE"))
bCheck = true;
if(strstr(buf,"COMBO_POS"))
sscanf(buf + strlen("COMBO_POS"),"%d",&lComboPos);
buf = strtok(NULL,"\r\n");
}
if(16 < lComboPos)
lComboPos = -1;
bRet = true;
}
fclose(f);
}
return bRet;
}
CString CDlgCap::getFilePath()
{
return sFilePath;
}
CString CDlgCap::getEditText()
{
return sEditText;
}
bool CDlgCap::getCheck()
{
return bCheck;
}
long CDlgCap::getComboPos()
{
return lComboPos;
}
void CDlgCap::setEditText(CString sText)
{
sEditText = sText;
}
void CDlgCap::setCheck(bool check)
{
bCheck = check;
}
void CDlgCap::getComboPos(long lPos)
{
lComboPos = lPos;
}
bool CDlgCap::SaveCaption()
{
bool bRet = false;
FILE * f = fopen(sFilePath,"wb+");
if(f)
{
fprintf(f,"[CDlgCap.ini]\r\n%s\r\n","[BEGIN]");
fprintf(f,"EDIT_TEXT %s\r\n",sEditText);
fprintf(f,"BOOLCHECK %s\r\n",bCheck ? "TRUE" : "FALSE");
fprintf(f,"COMBO_POS %d\r\n",lComboPos);
fprintf(f,"%s","[END]");
fclose(f);
bRet = true;
}
return bRet;
} |
|
Прикладываю проект, экзе и скрины работы