json을 사용하기 위한 필수 라이브러리 파일들.
JsonCpp 설치 및 설정 참고 블로그 주소
'MFC' 카테고리의 다른 글
json 라이브러리를 이용한 파일 Save/Load 예시 코드 (0) | 2015.05.28 |
---|
json을 사용하기 위한 필수 라이브러리 파일들.
JsonCpp 설치 및 설정 참고 블로그 주소
json 라이브러리를 이용한 파일 Save/Load 예시 코드 (0) | 2015.05.28 |
---|
//MFC를 책을 보고 어느정도 알고 있다는 전제하에 정리만 한 것.
//json 라이브러리 연결 및 자세한 사용법은 다음에 따로 계시할 것.
이렇게 다이알로그 창을 만들고. 해당 값들을 json 라이브러리로 저장하는 프로그램으로 코딩. 저장형식은 JSON File.
//다이얼로그 클래스 헤더 파일에
//위의 각 입력값에 대응할 변수 선언
CString HP; CString MAX_HP;
CString MP; CString MAX_MP;
CString ATT; CString DEF;
CString MTT; CString MOVE;
CString OLD;
CEdit m_HP; CEdit m_MAX_HP;
CEdit m_MP; CEdit m_MAX_MP;
CEdit m_ATT; CEdit m_DEF;
CEdit m_MTT; CEdit m_MOVE;
CEdit* pState; CButton* pSex;
CSliderCtrl C_OLD; CEdit E_OLD;
int Sex_check; int Race;
//다이얼로그 클래스 CPP 파일에
//위의 그림과 같이 배치한 메뉴와 변수를 연결해준다.
void CMFCApplication3Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_HP, m_HP);
DDX_Control(pDX, IDC_MAX_HP, m_MAX_HP);
DDX_Control(pDX, IDC_MP, m_MP);
DDX_Control(pDX, IDC_MAX_MP, m_MAX_MP);
DDX_Control(pDX, IDC_ATT, m_ATT);
DDX_Control(pDX, IDC_DEF, m_DEF);
DDX_Control(pDX, IDC_MTT, m_MTT);
DDX_Control(pDX, IDC_MOVE, m_MOVE);
DDX_Control(pDX, IDC_OLD, C_OLD);
DDX_Control(pDX, IDC_OLD_TEXT, E_OLD);
}
//확인 버튼을 눌렀을 때 위 메뉴에 입력한 값을 저장해야 함으로 아래와 같이 해준다.
void CMFCApplication3Dlg::OnBnClickedOk()
{
Funtion Get;
m_HP.GetWindowTextW(HP);
m_MAX_HP.GetWindowTextW(MAX_HP);
m_MP.GetWindowTextW(MP);
m_MAX_MP.GetWindowTextW(MAX_MP);
m_ATT.GetWindowTextW(ATT);
m_DEF.GetWindowTextW(DEF);
m_MTT.GetWindowTextW(MTT);
m_MOVE.GetWindowTextW(MOVE);
E_OLD.GetWindowTextW(OLD);
Sex_check = GetCheckedRadioButton(IDC_MALE, IDC_FEMALE);
Race = GetCheckedRadioButton(IDC_MAN, IDC_ELF);
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
Json::Value root;
root["HP"] = Get.GetCStringString(HP);
root["MAX_HP"] = Get.GetCStringString(MAX_HP);
root["MP"] = Get.GetCStringString(MP);
root["MAX_MP"] = Get.GetCStringString(MAX_MP);
root["ATT"] = Get.GetCStringString(ATT);
root["DEF"] = Get.GetCStringString(DEF);
root["MTT"] = Get.GetCStringString(MTT);
root["MOVE"] = Get.GetCStringString(MOVE);
root["OLD"] = Get.GetCStringString(OLD);
root["SKILL1"] = IsDlgButtonChecked(IDC_SLASH);
root["SKILL2"] = IsDlgButtonChecked(IDC_ENERGY_VOLT);
switch (Sex_check)
{
case IDC_MALE :
root["SEX"] = "MAN";
break;
case IDC_FEMALE:
root["SEX"] = "WOMAN";
break;
}
switch (Race)
{
case IDC_MAN:
root["RACE"] = "HUMAN";
break;
case IDC_ELF:
root["RACE"] = "ELF";
break;
}
//Json::Value Sex;
Json::StyledWriter sw;
std::string jsonData = sw.write(root);
FILE* pFile = NULL;
fopen_s(&pFile, "Data.json", "wt");
fwrite(jsonData.c_str(), jsonData.size(), 1, pFile);
fclose(pFile);
pFile = NULL;
CDialogEx::OnOK();
}
//읽기 버튼을 눌렀을 때는 파일을 읽어 로드해야 함으로 아래와 같이 해준다.
void CMFCApplication3Dlg::OnBnClickedButton1read()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CString str;
FILE* pFile = NULL;
fopen_s(&pFile, "Data.json", "rt");
BYTE buffer[256];
fseek(pFile, 0, SEEK_END);
int filesize = ftell(pFile);
fseek(pFile, 0, SEEK_SET);
fread_s(buffer, filesize,filesize,1, pFile);
Json::Reader rd;
std::string jsonData = (char*)buffer;
Json::Value root;
rd.parse(jsonData, root);
pState = (CEdit*)GetDlgItem(IDC_HP);
str = root["HP"].asCString();
pState->SetWindowTextW(str);
pState = (CEdit*)GetDlgItem(IDC_MAX_HP);
str = root["MAX_HP"].asCString();
pState->SetWindowTextW(str);
pState = (CEdit*)GetDlgItem(IDC_MP);
str = root["MP"].asCString();
pState->SetWindowTextW(str);
pState = (CEdit*)GetDlgItem(IDC_MAX_MP);
str = root["MAX_MP"].asCString();
pState->SetWindowTextW(str);
pState = (CEdit*)GetDlgItem(IDC_ATT);
str = root["ATT"].asCString();
pState->SetWindowTextW(str);
pState = (CEdit*)GetDlgItem(IDC_DEF);
str = root["DEF"].asCString();
pState->SetWindowTextW(str);
pState = (CEdit*)GetDlgItem(IDC_MTT);
str = root["MTT"].asCString();
pState->SetWindowTextW(str);
pState = (CEdit*)GetDlgItem(IDC_MOVE);
str = root["MOVE"].asCString();
pState->SetWindowTextW(str);
pState = (CEdit*)GetDlgItem(IDC_OLD_TEXT);
str = root["OLD"].asCString();
pState->SetWindowTextW(str);
str = root["SEX"].asCString();
if (str == "MAN")
{
pSex = (CButton*)GetDlgItem(IDC_MALE);
pSex->SetCheck(true);
}
else if (str == "WOMAN")
{
pSex = (CButton*)GetDlgItem(IDC_FEMALE);
pSex->SetCheck(true);
}
str = root["RACE"].asCString();
if (str == "HUMAN")
{
pSex = (CButton*)GetDlgItem(IDC_MAN);
pSex->SetCheck(true);
}
else if (str == "ELF")
{
pSex = (CButton*)GetDlgItem(IDC_ELF);
pSex->SetCheck(true);
}
CheckDlgButton(IDC_SLASH, root["SKILL1"].asBool());
CheckDlgButton(IDC_ENERGY_VOLT, root["SKILL2"].asBool());
fclose(pFile);
}
json 라이브러리 0.5.0버전 (0) | 2015.05.28 |
---|