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