2012-07-27 21 views
0

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

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。现在我只需要弄清楚为什么我的数组不工作。

回答

0

阅读中至少有两个问题。

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

    data [2] [3];

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

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

是的,只是想通了; >>操作符不能识别逗号。把''改为'',它就起作用了。谢谢! – user1558168 2012-07-27 16:44:54