Win32APIプログラムで困っています
Win32APIプログラムで困っています
僕は、C言語とともにWin32APIを勉強し始めたプログラム初心者です。
Visual Stdio 2008を使ってコンパイルと実行をしています。
今回自分でプログラムを作ろうと頑張っていたのですが、どうしても上手くいかないところがあるので、みなさんの力を借りたくて投稿しました。
初期化ファイルを使って設定を保存するというものなのですが、保存する際に以下のような関数を作りました。
#define SYSTEMFILE TEXT("system.ini")
TCHAR JapaneseSentenceKey[100][15] = {{TEXT("Japanese1")}, {TEXT("Japanese2")}, {TEXT("Japanese3")}, {TEXT("Japanese4")}, ~}}と100まであります。
TCHAR RomaSentenceKey[100][15] = {{TEXT("Roma1")}, {TEXT("Roma2")}, {TEXT("Roma3")}, {TEXT("Roma4")}, ~}}と100まであります。
void WriteSentence() //文のかきこみ
{
int i, number;
TCHAR szBufJapanese[200], szBufRoma[200], szBufFileName[20], szBuf[200];
GetWindowText(hChildWindow.hEditJapanese, szBufJapanese, 199);
GetWindowText(hChildWindow.hEditRoma, szBufRoma, 199);
GetWindowText(hMain, szBufFileName, 19);
for(i = 0; i < 100; i++){
GetPrivateProfileString(szBufFileName, JapaneseSentenceKey[i], TEXT("nothing"), szBuf, (DWORD)sizeof(szBuf), SYSTEMFILE);
if(szBuf == TEXT("nothing")){
number = i;
break;
}
}
WritePrivateProfileString(szBufFileName, JapaneseSentenceKey[number], szBufJapanese, SYSTEMFILE);
WritePrivateProfileString(szBufFileName, RomaSentenceKey[number], szBufRoma, SYSTEMFILE);
return;
}
このような関数です。
エディトコントロールから保存する文字列、タイトルからセクション名を取得します。
そして、for文の中でGetPrivateProfileString関数を使い初期化ファイルのキー名を調べ、そのキー名がないところでfor文のループを抜け出し、そのときのiの値をnumberに保存し、そのnumberの値のキー名のところにエディトコントロールから取得した文字列を保存するというものです。
想定としては、これでこの関数を呼び出すたびにデータのないところに保存されていく関数として作りました。
しかし、実際実行してみると、同じキーのところに何回も保存されていっこうに次のキーに保存しようとしてくれません・・・。
どうしてでしょうか・・??。
一生懸命考えたのですが、全くわかりません・・。
初期化ファイル自体に問題があるのでしょうか?
もしかしたら、単純ミスかもしれませんが、初心者ですので勘弁してください。
今回が質問初めてなので、色々と至らないところがありますが、何卒よろしくお願いします!!
長文失礼しました。
お礼
ご回答ありがとうございました。 色々調べてみましたが、皆さんの回答、参考になりました。 お陰様でどうにか回避できました。 http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp06_GetPrivateProfileString.html もなかなか参考になります。 よろしかったら、ご覧ください。 ありがとうございました。