2012-07-27 27 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