• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列のデータ削除方法)

配列のデータ削除方法

このQ&Aのポイント
  • 配列のデータを削除する方法について教えてください。
  • Windows98とVC++6.0を使用して、ダイアログ上の付箋を作成し、位置データと文字データをファイルに保存しています。付箋を削除した場合に、そのデータを保存しない方法が知りたいです。
  • 付箋ウィンドウを作成し、テキストデータと位置データを取得してファイルに保存しています。削除した付箋のデータを保存しない方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

1.剥がした付箋が何番目の要素か検索し、配列からCPtrArray::RemoveAt()で削除する 2.CMyWndのメンバ変数に削除済みフラグを持ち、フラグが立っていたら書き込まない 3.根本的なところで、ウィンドウを管理しない。 アプリが終了されるときに存在していたら、ウィンドウのOnDestroyで保存の処理をおこなう。 とか、いろいろ考えられます。他にもたくさんあるでしょう。 上に挙げたのはあくまでも案なので、自分のアプリに合う方法を 考えてください。 あとおまけ。 >sprintf(aa,"%d",pDlg->m_rect.left); //位置データ >sprintf(aaa,"%s",pDlg->m_moji);  //文字データ > >aaaa=aaaa+aa+crlf+aaa+crlf; aaaa += CString.Format("%d\r\n%s\r\n", pDlg->m_rect.left, pDlg->m_moji); とか、 aaaa += CString.Format("%d" crlf "%s" crlf, pDlg->m_rect.left, pDlg->m_moji); とかにしてみるとか。 #aaaaはCString、crlf は #define "\r\n"って勝手に想像してます。

VitaminBB
質問者

お礼

いつも本当にありがとう御座います。 基本形が全て完成したと思っていたら、今回の件でつまずき質問しました。 イメージは分かっていても今1つ手が動かず、また質問の回答をみても、簡単には行かないだろうと思っていました。 ところが、なっなんと奇跡です。一発でうまく行きました。 ようやく、C++に慣れてきたみたいです。 従来であれば、1を採用しました。 ところがCPtrArrayが今1つ分からず、剥がした付箋が何番目の要素か検索する方法が分かりません。 そこで2でやったらうまく行きました。 3は以前の仕様での方針でしたが、今回は方針を根本的に変えたので採用しませんでした。 今後のために1のもう少し具体的なコードを教えていただけると助かります。 aaaaはCStringです。crlf ="\x0a"としてます。 いただきって思いやってみたら、'CString' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。のエラーが出ました。 #CPtrArrayの良い例が本やネット上さがしても見つかりません。 CPtrArrayはある人が教えてくれたコードにあったので、便利だと思って採用しました。

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

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>従来であれば、1を採用しました。 >ところがCPtrArrayが今1つ分からず、剥がした付箋が何番目の要素か検索する方法が分かりません。 配列みたいに使えるんで、ループでまわして先頭からチェックしてみるとか for ( iCnt = 0; iCnt < m_pAryDlg.GetSize( ); iCnt ++ ) { if( this == (CMyWnd*)m_pAryDlg[ iCnt ]) { m_pAryDlg.RemoveAt( iCnt ); break; } } #m_pAryDlgはCMyWndの中では見えないと思うんでこのままでは動かないと思いますが。 >aaaaはCStringです。crlf ="\x0a"としてます。 >いただきって思いやってみたら、'CString' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。のエラーが出ました。 失礼しました。 CString::Format()が戻り値CString&だと思ったらvoidだったんでだめでしたね。 CString strBuf; strBuf.Format("%d" crlf "%s" crlf, pDlg->m_rect.left, pDlg->m_moji); aaaa += strBuf; とか、 strBuf.Format("%s%d\x0a%s\x0a", (LPCTSTR)aaaa, pDlg->m_rect.left, pDlg->m_moji); aaaa = strBuf; ってことで勘弁してください。 >#CPtrArrayの良い例が本やネット上さがしても見つかりません。 > >CPtrArrayはある人が教えてくれたコードにあったので、便利だと思って採用しました。 CArrayの方が便利かな?型チェックが効く分。 ただし、テンプレートなんで最初は苦労するかもしれませんが。 基本的な動的配列、リスト構造等を提供してくれるSTLというテンプレートライブラリが、 C++標準ライブラリとして存在します。(VC++にも入ってます) こちらならいい本もありますし、ネット上にも情報色々ありますよ。

VitaminBB
質問者

お礼

回答ありがとうございます。

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

関連するQ&A