在C ++应用程序中保存/加载工作区

时间:2012-07-27 16:21:36

标签: c++ windows user-interface

我正致力于为现有程序添加新功能。它基本上是一个保存/加载工作区功能,用户可以保存其窗口的位置,然后通过选择菜单项随时加载所述位置。为了实现这一点,我创建了代码,它提取窗口的屏幕坐标并将它们写入文件(下图):

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功能不起作用。具体来说,只有数据[0] [0]坐标才会保存到数组中(文件中的第一个值)。

这似乎是一件相当容易的事情,我有点尴尬,因为它给了我这么多麻烦......

编辑:我已修复问题#1。现在我只需要弄清楚为什么我的阵列没有工作。

1 个答案:

答案 0 :(得分:0)

阅读中至少有两个问题。

  1. 您的数组定义错误。它是:

    数据[2] [3];

  2. 这只有6个值。 但是,在循环中,您正在读取12个值。

    1. 文件中包含“,”值。你没有摆脱他们。 也许作为一个简单的解决方案,您可以在每次输入后添加新行。 或者您可以在一行中输入单个矩形的详细信息,然后阅读整行并自行解析各个组件。