• 締切済み

m_viewListの宣言はどこでしょうか

環境はVC++6.0です MFC wizardでスケルトンをつくりました ステップ1でSDI ステップ6でCEditViewを選択その他はデフォールトです void CTestDoc::Serialize(CArchive& ar) { // CEditView はすべてのシリアライゼーション ハンドルのどれかのエディットコントロールを含んでいます。 ((CEditView*)m_viewList.GetHead())->SerializeRaw(ar); } 上記のようにSerialize関数の中にm_viewListが使われていますが  これはどこで宣言されているのでしょうか  生成された ~.h ~.cpp のファイルをみたのですが どのファイルにも  ないようです  派生元のCDcument や CEditView にもないようです  ご存知の方がおられましたらご教示いただけませんでしょうか 

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

afxwin.hにあるようです。 http://www.page.sannet.ne.jp/mtoga/lang/cv/bih-m_70.htm グローバルオブジェクトっぽい感じですねぇ。

kanokawa
質問者

お礼

ありがとうございました そのようなところに在ったとは想像もしませんでした 

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • serializeについて

    VCのFILE処理はC言語と大きく異なっているようで戸惑っています。 serializeをオーバーライトすればいいとありました。 例えば CTestAppDoc::Serialize( CArchive& ar ) というようなメンバ関数ができます。 それで質問なんですけど、serializeを使ったファイルの読み書きは基本なんですか。 それとも、他に基本のコードがあるのでしょうか? 次にメンバ関数の利用には、そのクラスが必ずインスタンスを持つ必要があるのでしょうか。 もしあるのなら、CArchive のインスタンスはどこで作成されているのでしょう?

  • vector<int> に Serialize を使いたい!!

    VC++ の MFI で SDI をやっています。 Doc クラスにある整数のメンバ変数   CArray<int, int> nums を Serialize を使って読込・保存するには void Cなんかの名前Doc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: 格納するコードをここに追加してください。 nums.Serialize(ar); } else { // TODO: 読み込むコードをここに追加してください。 nums.Serialize(ar); } } とすることができます。 ここで質問です。 もし Doc クラスにある整数のメンバ変数   vector<int> nums についても Serialize を使って同様に読込・保存するには どのように記述したら良いのでしょうか。

  • クラスビューでクラスがなくなるのはなぜ?

    VC++6.0を使用し始めたものです。 最初にスケルトンを生成し、その後ソースを書き換えていると、 クラスビューを見たら、変更したソースのクラスが消えています。 例えば、TestというプロジェクトをSDIで生成すると CTestDocクラスやCTestViewクラスなどができますよね。 それからTestView.cppを書き換えたりすると、 クラスビューの表示を見たらCTestViewクラスが消えているといった具合です。 どうしてこのようになってしまうのでしょうか? 設定の問題でしょうか? VC++は使い始めて間もないので、よく分かりません。 どうぞ宜しくお願いします。

  • シリアライズ関数でのReadStringは読み直しができない?

    VC++6.0でMFCを使ってのCSVファイル入力を検討しています。 シリアライズ関数内でReadStringを使って1行づつ入力しているのですが、ファイル終端に達した後の処理として、もう一度ファイル先頭から読み直しをしたいのですが、うまくいきません。どうすれば、読み直しができるのでしょうか? 処理の流れは次のようにしました。 void CDispDoc::Serialize(CArchive& ar) { CString line; if (ar.IsStoring()) { } else { while(ar.ReadString (line)) {   何かの処理  } //whileを出たところでファイル先頭からの読み直しをしたい 次の2点を試したのですが、うまくいきません。 (1)ファイルポインタを戻してから入力する。 CFile* fp = ar.GetFile (); fp->SeekToBegin (); ar.ReadString (line);//この方法ではFalseが戻る (2)新たなArchiveオブジェクト作って使う。 CFile theFile(ar.GetFile()->GetFilePath (), CFile::modeRead); CArchive arc(&theFile, CArchive::load); arc.ReadString (line);//この方法では共有違反と言われる ReadStringでは読み直しができないのでしょうか?

  • ダイアログベースでのデータの保存について

    環境 WIN98 VC++6.0 MFC にて SDIベースで基本クラスをCFormViewとした場合、フォーム上のエディットボックスに入力したデータを保存する方法として以下のサンプルコードがありました。 void CVcdtstDoc::Serialize(CArchive& ar) { int i; //■追加 CString endmark="___end___"; //■追加 if (ar.IsStoring()) { // TODO: この位置に保存用のコードを追加してください。 //------------------------------■ここから追加 for(i=1; i<=maxct; i++){ ar << mydata[i]; } ar << endmark; //------------------------------■ここまで追加 } else { // TODO: この位置に読み込み用のコードを追加してください。 //------------------------------■ここから追加 for(i=1; i<=100; i++){ ar >>mydata[i]; if(mydata[i]==endmark){ --i; break; } } maxct=i; if(maxct>0) pos=1; //------------------------------■ここまで追加 } } 同様にシリアル化をダイアログベースのプログラムでやりたいのですが、どのようにすれば良いのでしょうか? ヒント程度では分からないと思いますので、具体的お願いしたいのですが、また参考サイトなどもあればお願いいたします。

  • VC++:ウィンドウキャプションの変更

    環境:VC++6/MFC ファイルを開こうとしたときにファイル形式を確認して、対応していないときは中断する。 というコーディングをしたいです。 どうしたらいいんでしょう? ファイルオープン部のコード void CProjectDoc::Serialize(CArchive& ar) {  if (ar.IsStoring())  {   // TODO: この位置に保存用のコードを追加してください。  }  else  {   // TODO: この位置に読み込み用のコードを追加してください。   m_FileName = ar.GetFile()->GetFilePath();   int nRet;   char szErrMsg[128];   nRet = LoadFile(m_FileName);   if(nRet == 1) {    // ファイルオープンエラー    wsprintf(szErrMsg,"ファイル %s が開けません",m_FileName);    MessageBox(NULL,szErrMsg,"LogViewer",MB_OK | MB_ICONERROR);    // ここで何かする?    return;   }   UpdateAllViews(NULL);  } }

  • CMainFrameクラスなどのオブジェクトはどこで定義されていますか?

    VC++6.0です。 SDIベースでスケルトンを作るとCMainFrameクラスなどが作られます。ソースの中でこれらのクラスのオブジェクトが生成されている部分を見たいのですが、見つかりません。 InitInstance()の中のRUNTIME_CLASS()があやしいような気がしますが、これなんでしょうか? ただしRUNTIME_CLASS()の関連ページを読んでもよくわかりませんでした。 今の目標はスケルトンで生成されたCMainFrameのオブジェクトのメンバにアクセスすることです。 よろしくお願いします。

  • スケルトンの中のどこでウィンドウが生成されているのか?

    VC++、MFCです。 MFC AppWizardでSDIベースのスケルトンを生成した時点で、既にウィンドウが作られるコードがソース内に存在するはずなのですが、単純にCreate関数を探しても見当たりません。 一体どこでウィンドウが作るコードはどこにあるのでしょうか?

  • Serialize(CArchive& ar)にて

    VC2008のMFC:SDIにて作成しております。 以下入力画面を作成しました。 <入力画面> 氏名     エディットボックス(DDX変数:m_Name) 郵便番号  エディットボックス(DDX変数:m_Yubin) 住所     エディットボックス(DDX変数:m_Jusho) として画面を作りました。 <シリアライズ関数にて> void CP208_JushoDoc::Serialize(CArchive& ar) { //ビューのポインタを取得します。 POSITION pos = GetFirstViewPosition(); CJushoView *pView = (CJushoView*)GetNextView(pos); if (ar.IsStoring()) { // TODO: 格納するコードをここに追加してください。 //エディットボックスに入力された値を取得する。 pView->UpdateData(TRUE); //メンバ変数の値をファイルに書き込み ar << pView->m_Name; ar << pView->m_Yubin; ar << pView->m_Jusho; } else { // TODO: 読み込むコードをここに追加してください。 //ファイルからメンバ変数に読み込み ar >> pView->m_Name; ar >> pView->m_Yubin; ar >> pView->m_Jusho; //エディットボックスに値を表示する pView->UpdateData(FALSE); } } ======↑コードココまで。 のコードを実装しております。 <質問> 各エディットボックスに、簡単な値を入力し「名前を付けて保存」しました。 ・入力内容 氏名:eeee 郵便番号:rrr 住所:fff 出力されたファイル(test.txt)を確認したところ、 「 eeee rrr fff」 とスペースらしきものが含まれた形で保存されていました。 書き込み時は、「arのメンバ変数にでも追記されて最終的な結果が出力されたかな」の認識でいます。 ただ、「メニューバーのファイルを開く」を選択して「test.txt」を読み込んでみたところ正しく表示されました。(メニューバーのコード等は一切触っておりません。) ・結果 氏名:eeee 郵便番号:rrr 住所:fff このように読み込まれたのです。なぜ  「eeeeまでが一区切りとコンピューターが判断し、m_Nameに代入できたのか?」 というのが知りたいのです。(m_Yubin、m_Jushoも正しく代入されているため問題なく表示できています。) csvみたいに、半角スペースで区切ってるのかと思い、 「氏名:aaaa▲bbbb」と、入力し保存後、ファイルを読み込んでみましたが、 正しく「氏名:aaaa▲bbbb」と表示されました。(▲は半角スペース) 一体、どういう理屈で、「eeeeまでが一区切りとコンピューターが判断し、m_Nameに代入できたのか?」 動いているのでしょうか? arに、文字列が格納される仕組みがわかれば解決するかなと思っているのですが、 http://msdn.microsoft.com/ja-jp/library/dz8k76ze … ココを参考にしたのですが、気になってる部分はわかりませんでした。 どなたかご教授よろしくお願いします。

  • MFC SDIアプリで開いているファイルを再度開く方法

    お世話になります。 VC++6.0 MFCを使ってSDIアプリを開発していますが、ウィザードが生成したスケルトンのシリアライズ関数についての質問です。 このシリアライズ関数は、「ファイル」メニューの「開く」コマンドで既に開いているファイルを指定すると、呼ばれないようです。 MSDNではDeleteContents関数で開いているドキュメントを捨てれば良いように書いてありますが、サンプルコードはアロケートメモリの解放位で、どうすればシリアライズ関数を呼び出してくれるのか判りません。 ご存じな方は教えて下さい。