お世話になっております。
C++を学習中の学生です。
現在下記のような住所録アプリケーションを作成中です。
写真右下にある読み込みボタンを押下し
上記のテキストファイルの中身をリストコントロールに読み込ませたいのですが、どう記述すればいいのでしょうか。
ご教授いただけると幸いです。
よろしくお願いいたします。
以下ソース
C++
1//------------------------------------------------------------------------------ 2// ダイヤログ初期化処理 3//------------------------------------------------------------------------------ 4BOOL CZyuSyoDlg::OnInitDialog() 5{ 6 CDialogEx::OnInitDialog(); 7 8 // "バージョン情報..." メニューをシステム メニューに追加します。 9 10 // IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。 11 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 12 ASSERT(IDM_ABOUTBOX < 0xF000); 13 14 CMenu* pSysMenu = GetSystemMenu(FALSE); 15 if (pSysMenu != NULL) 16 { 17 BOOL bNameValid; 18 CString strAboutMenu; 19 bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); 20 ASSERT(bNameValid); 21 if (!strAboutMenu.IsEmpty()) 22 { 23 pSysMenu->AppendMenu(MF_SEPARATOR); 24 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 25 } 26 } 27 28 // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、 29 // Framework は、この設定を自動的に行います。 30 SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定 31 SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定 32 33 // TODO: 初期化をここに追加します。 34 35 make_queue(); 36 37 m_List.InsertColumn(0, "No." , LVCFMT_CENTER, 35); //No列を追加 38 m_List.InsertColumn(1, "性別", LVCFMT_CENTER, 45); //性別列を追加 39 m_List.InsertColumn(2, "名前", LVCFMT_CENTER, 70); //名前列を追加 40 m_List.InsertColumn(3, "年齢", LVCFMT_CENTER, 35); //年齢列を追加 41 m_List.InsertColumn(4, "住所", LVCFMT_LEFT, 200); //住所列を追加 42 43 CEdit* pEditName = (CEdit *)GetDlgItem( IDC_NAME_I ); 44 CEdit* pEditHome = (CEdit *)GetDlgItem( IDC_HOME_I ); 45 CEdit* pEditTosi = (CEdit *)GetDlgItem( IDC_TOSI_I ); 46 47 //エディットボックスに入力できる文字数を設定する 48 pEditName->LimitText(14); 49 pEditHome->LimitText(70); 50 pEditTosi->LimitText(3); 51 52 53 54 return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。 55} 56 57//------------------------------------------------------------------------------ 58// キューの生成 59//------------------------------------------------------------------------------ 60void CZyuSyoDlg::make_queue() 61{ 62 struct Queue *que; 63 64 for( int count=0; count<256; count++ ) 65 { 66 //キューの生成 67 if( count == 0 ) 68 { 69 que = (struct Queue*)malloc(sizeof(struct Queue)); // メモリの確保 70 m_pQueue = que; // 先頭をメンバ変数 71 } 72 else 73 { 74 que->next = (struct Queue*)malloc(sizeof(struct Queue)); // ポインタを繋ぐ 75 que = (struct Queue*)que->next; // nextの値をqueに 76 } 77 que->next = NULL; // nextにNULL 78 memset(que, 0, sizeof(struct Queue)); // クリア 79 } 80} 81 82//------------------------------------------------------------------------------ 83// キューの解放 84//------------------------------------------------------------------------------ 85void CZyuSyoDlg::QueClose() 86{ 87 struct Queue *que; 88 que = m_pQueue; 89 while( 1 ) 90 { 91 m_pQueue = (struct Queue*)que->next; 92 free( que ); 93 que = m_pQueue; 94 if( que == NULL ) 95 { 96 break; 97 } 98 } 99} 100 101//------------------------------------------------------------------------------ 102// キューの切り離し 103//------------------------------------------------------------------------------ 104struct Queue* CZyuSyoDlg::QueCut() 105{ 106 struct Queue *head; 107 108 // キューを切り離す(先頭) 109 if( m_pQueue != NULL ) 110 { 111 head = m_pQueue; 112 m_pQueue = (struct Queue*)head->next; //次の先頭 113 } 114 return( head ); 115} 116 117//------------------------------------------------------------------------------ 118// データキューを繋ぐ 119//------------------------------------------------------------------------------ 120void CZyuSyoDlg::QueData(struct Queue *head) 121{ 122 if( m_pQueue2 == NULL ) 123 { 124 m_pQueue2 = head; 125 } 126 else 127 { 128 struct Queue *data; 129 data = m_pQueue2; 130 while( 1 ) 131 { 132 if( data->next == NULL ) 133 { 134 data->next = head; 135 break; 136 } 137 data = (struct Queue*)data->next; 138 } 139 } 140 head->next = NULL; 141 142} 143 144//------------------------------------------------------------------------------ 145// 送信ボタン押下処理 146//------------------------------------------------------------------------------ 147void CZyuSyoDlg::OnBnClickedGo() 148{ 149 struct Queue *head; 150 head = QueCut(); 151 152 CStdioFile ZyuSyoFile; 153 //テキストファイルを開く 154 ZyuSyoFile.Open("ZyuSyoData.txt",CFile::modeReadWrite | 155 CFile::shareDenyNone | CFile::modeCreate | CFile::modeNoTruncate); 156 157 ZyuSyoFile.SeekToEnd(); 158 159 //------------// 160 //名前部の取得// 161 //------------// 162 CString strName; 163 ((CEdit*)GetDlgItem(IDC_NAME_I))->GetWindowText( strName ); 164 //CString → charへの変換 165 strcpy_s( head->data.name, strName ); 166 167 //------------// 168 //住所部の取得// 169 //------------// 170 CString strHome; 171 ((CEdit*)GetDlgItem(IDC_HOME_I))->GetWindowText( strHome ); 172 strcpy_s( head->data.home, strHome ); 173 174 //------------// 175 //年齢部の所得// 176 //------------// 177 CString strTosi; 178 ((CEdit*)GetDlgItem(IDC_TOSI_I))->GetWindowText( strTosi ); 179 strcpy_s( head->data.tosi, strTosi ); 180 181 //------------// 182 //Noの所得 // 183 //------------// 184 CString strNo; 185 m_Combo.GetLBText(m_Combo.GetCurSel(),strNo); 186 strcpy_s( head->data.no, strNo ); 187 188 //----------------// 189 //性別の取得(男性)// 190 //----------------// 191 CString strType; 192 if( ( (CButton*)GetDlgItem(IDC_RADIO_B) )->GetCheck() == BST_CHECKED ) 193 { 194 strType = ("男性"); 195 strcpy_s( head->data.type, strType ); 196 } 197 198 //----------------// 199 //性別の判定(女性)// 200 //----------------// 201 if( ( (CButton*)GetDlgItem(IDC_RADIO_G) )->GetCheck() == BST_CHECKED ) 202 { 203 strType = ("女性"); 204 strcpy_s( head->data.type, strType ); 205 } 206 207 //----------------// 208 //リストへ追加 // 209 //----------------// 210 // リストコントロール 行の追加 211 int count = m_List.GetItemCount(); 212 m_List.InsertItem(count, strNo); //No行を追加 213 m_List.SetItem(count, 1, LVIF_TEXT, strType, 0, 0, 0, 0); //性別行を追加 214 m_List.SetItem(count, 2, LVIF_TEXT, strName, 0, 0, 0, 0); //名前列を追加 215 m_List.SetItem(count, 3, LVIF_TEXT, strTosi, 0, 0, 0, 0); //年齢行を追加 216 m_List.SetItem(count, 4, LVIF_TEXT, strHome, 0, 0, 0, 0); //住所行 217// CDialog::OnOK(); 218 219 //----------------// 220 //ファイル入出力 // 221 //----------------// 222 //テキストファイルに書き込む 223 ZyuSyoFile.WriteString( "No:" + strNo + "|" ); 224 ZyuSyoFile.WriteString( "性別:" + strType + "|" ); 225 ZyuSyoFile.WriteString( "名前:" + strName + "|" ); 226 ZyuSyoFile.WriteString( "年齢:" + strTosi + "|" ); 227 ZyuSyoFile.WriteString( "住所:" + strHome + "\n" ); 228 229 //テキストファイルを閉じる 230 ZyuSyoFile.Close(); 231 232 233 QueData(head); 234} 235 236//------------------------------------------------------------------------------ 237// クリアボタン押下処理 238//------------------------------------------------------------------------------ 239void CZyuSyoDlg::OnBnClickedClear() 240{ 241 //エディットボックス内をクリアする 242 CEdit* pEdit = (CEdit *)GetDlgItem( IDC_NAME_I ); 243 CEdit* pEdit1 = (CEdit *)GetDlgItem( IDC_HOME_I ); 244 CEdit* pEdit2 = (CEdit *)GetDlgItem( IDC_TOSI_I ); 245 246 pEdit ->SetWindowText(""); 247 pEdit1->SetWindowText(""); 248 pEdit2->SetWindowText(""); 249 250} 251 252
回答3件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2016/11/08 02:45
2016/11/08 03:04 編集
2016/11/08 04:38 編集
2016/11/08 05:00
2016/11/08 05:01
2016/11/08 05:22
2016/11/08 05:30
2016/11/08 05:58
2016/11/08 06:05 編集