プリファレンスファイルを作成する。
(1)KidsCindyをQuitするときにプリファレンスファイルを上書きする。
(2)KidsCindyを起動するとき、プリファレンスファイルを探し、もしあれば設定を変更する。
(2)KidsCindyを起動するとき、プリファレンスファイルを探し、もしあれば設定を変更する。
プリファレンスファイル名はwxKC.pref
内容は未定だが少なくともGMode=KSEG;またはGMode=CINDY;を含むようにすることは決めている。
内容は未定だが少なくともGMode=KSEG;またはGMode=CINDY;を含むようにすることは決めている。
作業工程(1)
KidsCindyをQuitするとき:wxKidsCindy.cppのMyFrameクラスのイベントハンドらを探す。
KidsCindyをQuitするとき:wxKidsCindy.cppのMyFrameクラスのイベントハンドらを探す。
EVT_MENU (ID_FILE_QUIT, MyFrame::OnQuit)
を発見。同じくwxKidsCindy.cppに
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { // true is to force the frame to close Close(true); }
を発見。Closeする前に
WritePrefFile();
を呼び出す。ただし、状況から見て、この関数はMyCanvasのメンバー関数となるだろうから、具体的には
m_canvas->WritePrefFile();
を追加。ということで、MyCanvasクラスに、この名前の関数を追加する。本体はwxKidsCindy.cppにおくことにする。正確には、MyCanvasのメンバー関数の後ろにくっつける。(280行めくらい)とりあえずこんな感じ。
WritePrefFile();
を呼び出す。ただし、状況から見て、この関数はMyCanvasのメンバー関数となるだろうから、具体的には
m_canvas->WritePrefFile();
を追加。ということで、MyCanvasクラスに、この名前の関数を追加する。本体はwxKidsCindy.cppにおくことにする。正確には、MyCanvasのメンバー関数の後ろにくっつける。(280行めくらい)とりあえずこんな感じ。
void MyCanvas::WritePrefFile() { wxString g_Path=wxT("wxKC.pref"); wxFile myF(g_Path,wxFile::write); if(GMode==MODE_CINDY){ myF.Write(wxT("GMode=CINDY;")); } else { myF.Write(wxT("GMode=KSEG;")); } myF.Close(); }
作業工程(2)
KidsCindyを起動するとき、GModeはMyCanvasのコンターで初期化しているそれより後であればどこでもよいわけだが、せっかくなので、コンター内で解決することにする。
MyCanvas::ReadPrefFile()
という関数を新規作成する。
中身はこんな感じ
KidsCindyを起動するとき、GModeはMyCanvasのコンターで初期化しているそれより後であればどこでもよいわけだが、せっかくなので、コンター内で解決することにする。
MyCanvas::ReadPrefFile()
という関数を新規作成する。
中身はこんな感じ
void MyCanvas::ReadPrefFile() { wxString g_Path==wxT("wxKC.pref"); wxFile myF; if(myF.Open(g_Path,wxFile::read)){ int length=myF.Length(); char* buffer=new char[length+1]; myF.Read(buffer,length); myF.Close(); for(int i=0;i<length;i++){ if(strncmp(buffer+i,"GMode=CINDY",11)==0){ GMode=MODE_CINDY; } else if(strncmp(buffer+i,"GMode=KSEG",10)==0){ GMode=MODE_KSEG; } } delete []buffer; } }
(11月2日)あはら
なぜだかわからないが、prefファイルがないところで起動すると「ファイルがない」というメッセージが出てしまう。アルゴリズム的には「ファイルが開ければ開くし、開けなければ何もしない」と意図的に書いているだけにこのメッセージは不要だ。何かのフラグを起こしておけばこのメッセージは出ないものと思われるがそれが何かはまだわからない。
もうひとつ、メニューのQuit以外にも、ウィンドウ右上のXマークで終了したときにも、prefファイルを残すようにした。これはEVT_CLOSEというハンドらからOnCloseという関数を呼び出して処理をした。
(11月4日)あはら
(11月4日)あはら
線モードや点モードやアピアランスモードなどもプリファランスファイルに記録することにした。成功。
(12月11日)あはら
(12月11日)あはら