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の値のキー名のところにエディトコントロールから取得した文字列を保存するというものです。
想定としては、これでこの関数を呼び出すたびにデータのないところに保存されていく関数として作りました。
しかし、実際実行してみると、同じキーのところに何回も保存されていっこうに次のキーに保存しようとしてくれません・・・。
どうしてでしょうか・・??。
一生懸命考えたのですが、全くわかりません・・。
初期化ファイル自体に問題があるのでしょうか?
もしかしたら、単純ミスかもしれませんが、初心者ですので勘弁してください。
今回が質問初めてなので、色々と至らないところがありますが、何卒よろしくお願いします!!
長文失礼しました。
お礼
ありがとうございます。 理解できました。 GetPrivateProfileStringの戻り値を使って、mid関数にて文字列取り出していたため、 全角を1とカウントするか、2とカウントするかの違いが出てたようです。