json을 사용하기 위한 필수 라이브러리 파일들.



jsoncpp-src-0.5.0.zip


JsonCpp 설치 및 설정 참고 블로그 주소

http://sks3297.tistory.com/entry/C-JsonCpp-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

'MFC' 카테고리의 다른 글

json 라이브러리를 이용한 파일 Save/Load 예시 코드  (0) 2015.05.28


Funtion.cpp

Funtion.h

MFCApplication3.cpp

MFCApplication3.h

MFCApplication3Dlg.cpp

MFCApplication3Dlg.h


//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);

}


'MFC' 카테고리의 다른 글

json 라이브러리 0.5.0버전  (0) 2015.05.28

+ Recent posts