0

既存のプログラムに新しい機能を追加する作業を行っています。これは基本的に、ユーザーがウィンドウの位置を保存し、メニュー項目を選択することでいつでもその位置を読み込むことができるワークスペースの保存/読み込み機能です。これを実装するために、ウィンドウの画面座標を抽出してファイルに書き込むコードを作成しました (以下)。

void CMainFrame::SaveWorkspace()
{

RECT ctrlsize;
m_pDialog->GetWindowRect((LPRECT)&ctrlsize);  //obtains location for window
ofstream Workspace("saveone", ios::out);
Workspace << ctrlsize.left << "," << ctrlsize.top << "," << ctrlsize.right << "," << ctrlsize.bottom;

}

そして、これは(想定されている)ワークスペースをロードします:

void CMainFrame::LoadWorkspace()
{

 //Read in the data from the file
int data[3][4];
int r=0;
int a=0;
int b=0;

ifstream infile;

infile.open("saveone");
for(a = 0; a< 3; a++)
{
for(b = 0;b<4;b++)
{
  infile >> data[a][b];
  cout << data[a][b];
}
}


infile.close();

//Now, assign the extracted values
RECT ctrlset;

ctrlset.top = data[0][1];
ctrlset.left = data[0][0];
ctrlset.right = data[2][0];
ctrlset.bottom = data[0][3];
// Finally, reassign the window positions

m_pDialog->SetWindowPos(NULL, ctrlset.left, ctrlset.top, (ctrlset.right - ctrlset.left),     (ctrlset.bottom - ctrlset.top), SWP_SHOWWINDOW);

}

問題:

1) SaveWorkspace 関数は散発的に機能します。多くの場合、ファイルは作成されません。2) LoadWorkspace 関数が機能しません。具体的には、data[0][0] 座標のみが配列 (ファイルの最初の値) に保存されます。

これはかなり簡単なことのように思えますが、これが私に多くの問題を引き起こしていることを少し恥ずかしく思います...

編集: 問題 #1 を修正しました。ここで、アレイが機能しない理由を突き止める必要があります。

4

1 に答える 1

0

読書には少なくとも2つの問題があります。

  1. 配列の定義が間違っています。それは:

    データ[2][3];

これには6つの値しかありません。ただし、ループでは12個の値を読み取っています。

  1. ファイルには「、」の値があります。あなたはそれらを取り除くことはありません。おそらく簡単な解決策として、エントリを作成するときに、各エントリの後に新しい行を追加することができます。または、1行に単一の長方形の詳細を入力してから、行全体を読み取り、個々のコンポーネントを自分で解析することもできます。
于 2012-07-27T16:38:09.027 に答える