2014-05-02 52 views
0

我正在使用Visual C++爲我的學校項目創建一個簡單的編譯器及其圖形界面(Windows窗體)。如何從Win32控制檯應用程序類更改WinForm控件的屬性

我用一個Visual C++ Win32控制檯應用程序項目開發的主要類爲:讀取,編譯,裝配等它運作良好,到現在作爲一個控制檯應用程序,但問題是,我不知道如何將我的類與Windows窗體「集成」。

,比如我有我的閱讀類:

class Reading { 
private: 
    string TheFile; 
    long TheFileLength; 
    long TheFileMark; 
    long CurrentLine; 

public: 
Reading() { 
    TheFileMark=0; 
    CurrentLine=1; 
} 
void OpenTheFile(basic_string<TCHAR> FileName); 
enum WordTypes{EndOfLine, Identifier, Number, String, Symbol, None}; 
}; 

當我嘗試在OpenTheFile方法來打開文件:

void Reading::OpenTheFile(basic_string<TCHAR> FileName) { 
    ifstream File(FileName.c_str(), ios::in); 
    if (File.is_open() == false) { 
     cout << "Error ! Could not open file: "<<FileName <<endl; 
     exit(1); 
    } 
} 

其實我是想取代「COUT」,使其將在Windows窗體控件中顯示消息,例如在TextBox中。

我包括我的「Reading.h」項目的.cpp文件,但我不能去上班了一種用於上述要求...

有沒有辦法做到這一點?

回答

0

您無法使用winform應用程序使該代碼正常工作。在使用winform application時,您正在用一種不同的語言C++/CLI進行編譯。 C++的語法非常相似,但它可以處理其他功能。
在控制檯應用程序中,每行代碼都被一個接一個執行。這意味着,如果您有300行代碼,那些代碼將被執行,但編譯器會發現某種錯誤。
在Winform中,它不一定是正確的。如果你想編譯一些代碼,你必須解僱一些事件。
讓我們來看看這個例子。你有一個按鈕的應用程序,如果按下,顯示「Hello World」的彈出式窗口。直到button1不會被點擊

System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { 
    MessageBox::Show("Hello World"); 
} 

此代碼不會被「看到」由編譯器:您將代碼只是這樣。
所以,如果你想在你的應用程序中使用你的類,你需要:

  • 轉換成C++/CLI(+找到一些教程的創建WinForm的應用程序:d)
  • 圖出來的時候以及你希望你的函數被調用和代碼的地方,例如,一個按鈕的點擊事件(但你可以在很多選擇中進行選擇)。

總結這件事,你會有這樣的事情:

System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { 
    /*Your converted Reading function */ 
    MessageBox::Show("Error ! Could not open file: "+ FileName); 
} 
+0

非常感謝您的回答,我同意你的看法。我有使用WinForms創建應用程序的一些經驗,但我仍然不得不問。我會嘗試解決我的代碼,看看我會得到什麼。再次感謝 ! – bTz

相關問題