プログラム初心者です。
質問させてください!
リソース機能を用いて、親ウインドウのメニューバーから子ウインドウのダイアログを作成するプログラムを作りました。
さらにその子ウインドウ上に、エディットボックスのコントロールを作り、それに入力した数値をこの子ウインドウ上に新に設けたボタン(IDC_BUTTON1)が押された時に、この数値をテキストファイルに上書きして名前をつけて保存という形で保存させたいと思っております。
MFCの機能は使っておりません。
このような機能を実現させるためには、
どのような関数を使えばいいのでしょうか。
コモンダイアログボックスを使ってうまくプログラムを書ければと思うのですが・・・
どなたかご教授よろしくお願いいたします。
No.1
- 回答日時:
エディットボックスは数値で入っているのではなく、文字列で入っています。
ですから、数値->文字列 変換は必要ありません。
プログラムの流れは次のようになります。
1.IDC_BUTTON1が押されたときにエディットボックスの文字列を取得する
2.指定したパス?のファイルを上書きモードで開く
3.1で取得した文字列をファイルの最後尾に書き込む
4.ファイルを閉じる
まずは1から順番にやっていって見てください。
1のヒントはGetWindowTextとGetDlgItemです。
この回答への補足
迅速なお返事と的確なアドバイスありがとうございます!
TCHAR sBuff[5];
GetWindowText(GetDlgIte(hWnd,IDC_EDIT1),sBuff,5);
と宣言して、
sbuffにエディットボックスの文字列を格納したところまではうまくいっていたのですが・・・、
ここからがよくわかりません。
構想としては、このsBuffに格納された文字列を別に作ったコントロールであるボタン(IDC_BUTTON1)を押した時に、別のテキストファイルとして名前をつけて保存し(例えばここでaaa.txtとして保存したとします。)、
さらに別に作ったコントロールであるボタン(IDC_BUTTON2)を押した時に、先ほどのaaa.textのファイルを開き、
最初のエディットボックスに上書きという形にしたいのです。
この場合、参考書を読んだ結果、GetSaveFileNameとGetOpenFileName関数を使ってコモンダイアログを使うと便利なのかなと思ったのですが、この関数の使い方がよくわからなくて。
もう少し調べて頑張ってみます。恐れ入りますがまた質問させていただくと思います。
その時はご教授よろしくお願い致します。
お世話になります。
質問させていただいてからあれこれやってみたのですが、コモンダイアログを開くことができました。
↓は作成した子ウインドウのソースの一部なのですが、
このダイアログ上に私が作成した名前をつけて保存ボタンを押した時(IDC_BUTTON3)に、ご教授いただいたGetWindowText、GetDlgItem関数を用いてエディットボックスの値をBuff1,Buff2にそれぞれ格納しました。
しかし、この値を新にテキストとして保存したり、その保存したテキストから値を読み込んで、それぞれのエディットボックスに上書きするようにしたいのですが、どうしてもうまくいきません。
恐れ入りますがアドバイスをいただけると助かります。お忙しい時間を私に割いてくださり申し訳ございません。
BOOL CALLBACK DlgWndProc(HWND hWnd1,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
TCHAR Buff1[5],Buff2[5];
static OPENFILENAME ofn;
static TCHAR strFile[MAX_PATH];
switch(message)
{
case WM_INITDIALOG:
SetDlgItemInt(hWnd1,IDC_EDIT1,100,FALSE);
SetDlgItemInt(hWnd1,IDC_EDIT2,100,FALSE);
//コモンダイアログの設定
ofn.lStructSize = sizeof (ofn);
ofn.hwndOwner = hWnd1;
ofn.lpstrFile = strFile; //選択されたファイル名を代入するためのバッファ
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFilter = "データ\0*.txt\0";
ofn.nFilterIndex = 0;
ofn.Flags = OFN_FILEMUSTEXIST;
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_BUTTON2: //開くボタンが押された時の処理。
//ここの処理がわかりません。
GetOpenFileName(&ofn);
SetWindowText(hWnd1 , strFile);
return TRUE;
case IDC_BUTTON3: //名前をつけて保存ボタンが押された時の処理。
GetWindowText(GetDlgItem(hWnd1,IDC_EDIT1),Buff1,5);
GetWindowText(GetDlgItem(hWnd1,IDC_EDIT2),Buff2,5);
//ここの処理がわかりません。
GetSaveFileName(&ofn);
SetWindowText(hWnd1 , strFile);
return TRUE;
No.2ベストアンサー
- 回答日時:
ファイル操作についての知識が不足していると受け取って宜しいのでしょうか?
それともGetOpenFileName、GetSaveFileNameの使い方がわかっていないのでしょうか?
前者であれば、
fopen()かCreateFile()を調べてみてください。
後者であれば、今回の場合は strFile にパスが格納される"だけ"ですので、
GetOpenFileName、GetSaveFileNameの後にfopen()またはCreateFile()を実行する必要があります。
あと、APIや標準ライブラリを使用する際は戻り値でエラーチェックした方がいいですよ。
if( !GetOpenFileName(&ofn) ) {
// エラー発生
}
見たいな感じで。
この回答への補足
迅速なお返事ありがとうございます。
おそらくファイル操作、また、GetOpenFileName,GetSaveFileNameの使い方共に理解不十分であるのだと思います。申し訳ございません。
fopenでファイルを開くよう↓のようプログラムを書いてみたのですが、データを読み込んでくれませんでした。
fopen(" ","r+")の" "の中に指定している変数が間違っているのでしょうか??
何度も申し訳ないです。
case IDC_BUTTON2: //開くボタンが押された時の処理。
GetOpenFileName(&ofn);
wsprintf(strMsg, "ファイルが選択されました。\nファイル名は\n%s\nです。",
strFile);
MessageBox(NULL, strMsg, "", MB_OK | MB_ICONINFORMATION);
newfile = fopen("strFile","r+"); //←ここです。
if(newfile == NULL){
MessageBox(hWnd1,"データを読み込めませんでした","",MB_OK);
}
else{
fscanf(newfile,"%d%d",&a1,&b1);
}
fclose(newfile);
}
return TRUE;
newfile = fopen("strFile","r+");
何度も申し訳ございませんでした。
たった今、
"strFile"の""をなくしたことで、
問題が解決いたしました。
keibou21さまがご丁寧に教えてくださり、本当に感謝しております。ありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Windows 10 ファイルエクスプローラーでフォルダを閉じる操作について 2 2022/10/15 11:06
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(プログラミング・Web制作) マウスオーバー→ホイール回転でスクロールできない 2 2022/10/31 10:06
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
EXCEL(VBA)で指定フォルダ内の...
-
パスワード保護されたExcelファ...
-
SaveAsの保存先について
-
Excel VBAでテキストファイルを...
-
エクセルVBAで一つ上の階層...
-
【VB.NET】App.configにファイ...
-
初心者powershellのPS1ファイル...
-
ExcelVBAの使い方 ¥の使い方...
-
Excel 相対パス
-
ファイルストリームからファイ...
-
VB2005 でパス名が誤っていない...
-
fopenでのパス指定
-
ShellExecuteでエクセルファイ...
-
VBAでテキストファイル中の文字...
-
エクセルのマクロで特定フォル...
-
VBAで、VBのapp.pathと同じ機能...
-
CreateProcess error=0
-
ListViewにSETしたファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
xcopyコマンドの進行状況を表示...
-
【VBA】ExcelマクロでCSVファイ...
-
EXCEL(VBA)で指定フォルダ内の...
-
エクセルのマクロで特定フォル...
-
パスワード保護されたExcelファ...
-
ExcelVBAの使い方 ¥の使い方...
-
開いているファイルを削除し、...
-
SaveAsの保存先について
-
初心者powershellのPS1ファイル...
-
fopenでのパス指定
-
VBA★PDFをPDFアプリで印刷し...
-
【Excel VBA】Power Qurry のソ...
-
指定したフォルダ内の最新ファ...
-
A列に記載されているフォルダ...
-
ExcelのVBAで上書き保存を確...
おすすめ情報