24.シリアル化とはなんでしょうか? |
オブジェクト自身が読み書きを自動的に行なう点よく分からいなぁと思う人も多いでしょうが、このオブジェクト自身による自動的な読み書きのおかげで、私たちはドキュメントを簡単に保存したり、開いたりしているわけです。例えばドキュメントを開くときには、本来こんな作業をしなくてはいけません。([ファイル]-[開く]の場合)
逆シリアル化でオブジェクトを再構築する点
BOOL CMyHtmlApp::InitInstance() { (中略) // アプリケーション用のドキュメント テンプレートを登録します。ドキュメント テンプレート // はドキュメント、フレーム ウィンドウとビューを結合するために機能します。 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CMyHtmlDoc), RUNTIME_CLASS(CMainFrame), // メイン SDI フレーム ウィンドウ RUNTIME_CLASS(CMyHtmlView)); AddDocTemplate(pDocTemplate); (中略) } |
25.さてコーディングですが |
void CMyHtmlDoc::OnToolPreview() { // CEditViewへのポインタの取得 CMyHtmlView* pView = GetMyView(); char chDrv[_MAX_DRIVE]; // ドライブ名 char chDir[_MAX_DIR]; // ディレクトリ名 CString strTempFile; // 現在編集中のドキュメントのパスを取得 if(GetPathName().IsEmpty()){AfxMessageBox("ドキュメントを一度保存してください");return;} // 一時ファイル名の作成 _splitpath(GetPathName(),chDrv,chDir,NULL,NULL); strTempFile =(CString)chDrv + (CString)chDir + "\\tmp_preview.html"; // シリアル化 OnSaveDocument(strTempFile); // 表示 ::ShellExecute(NULL,NULL,strTempFile,NULL,NULL,SW_SHOWNORMAL); } |