簡體   English   中英

將C ++代碼與GUI集成

[英]Integrating C++ Code with a GUI

我正在嘗試將安全系統作為微控制器學期項目的一部分。 軟件方面的工作我幾乎完成了。 我只需要設計一個GUI,它將用作我的安全系統的指示器或警報設備。 微控制器利用傳感電路檢查系統是否被破壞,並將警報信號串行發送到PC。 我正在使用C ++從PC串行端口讀取數據,整個過程運行非常好。 但是,我正在基於控制台的環境中進行操作。 這就是我所知道的。 我正在學習成為一名電子工程師。 :P

但是,那是不可接受的,我需要為我的項目設計一個GUI。

問題1:無論如何,我可以將現有代碼與GUI集成嗎? 我已經用谷歌搜索了,沒有多大運氣。 所有答案似乎都指向外部庫(例如Qt等)的方向。這有點嚇人,因為我沒有很多時間。

問題2:正如我前面提到的,我對必須使用外部庫等的想法感到有些害怕。因此,我嘗試使用基於Visual C ++的Windows窗體應用程序在Visual Studio上創建GUI。 我使用了工具箱中的serialport實用程序。 我還無法從COM端口讀取數據,但可以向其中寫入數據。

表單如下所示:

在此處輸入圖片說明

我正在嘗試在文本框中顯示從串行端口讀取的數據以響應按鈕的按下。 這是我用於按鈕的代碼:

private: System::Void textBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) 
{}

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
{
this->serialPort1->PortName = "COM1";  
this->serialPort1->Open();
this->serialPort1->BaudRate = 9600;
try
{
this->textBox1->Text=this->serialPort1->ReadLine();
}
catch(TimeoutException^)
{
this->textBox1->Text="Timeout Exception";
}
this->serialPort1->Close(); 

你能告訴我我做錯了什么嗎? 我是新來的。 順便說一句,這是我的首選方法。

如果您不想使用外部庫,那么使用Windows Forms絕對是必經之路,這也是我要做的。

我不完全了解這些事情,但是僅使用ReadLine()可能是問題的根源。 也許通過串行端口傳入的數據不僅僅通過一行來發送。 也許您將不得不遍歷輸入,連續使用ReadLine()並收集數組中的行,直到接收到所有數據為止。

但是也許還有另一個命令,例如ReadAllLines() ,它可以一次讀取所有輸入並將其返回給您?

我直接懷疑的是ReadLine()命令-您確定您的MC正在寫結束符嗎?

請改用ReadFile,看看是否可以讀取單個字節。 如果沒有,那么您可能需要調整更多選項。 如果遇到超時異常,則需要調整讀取超時(SetCommTimeouts)。

艾倫·丹佛(Allen Denver)在這里很好地描述了您所需的一切: http : //msdn.microsoft.com/zh-cn/library/ff802693.aspx

至於哪個GUI,如果您正在使用的任何Windows Forms項目都可以工作,請堅持使用。 我個人使用MFC完成了類似的最后一年項目,但這是因為我已經熟悉了它。

對於下一次,請學習C#。 C#和Java在創建GUI方面遠非如此,而且更加快捷。

關於問題1,我建議您使用MFC庫,這很容易。 這是一個很好的示例,供您開始。 http://depts.washington.edu/cmmr/biga/chapter_tutorials/1.C++_MFC_D3DOGL/1.StepByStepGuide/index.html

根據我的理解,您已經能夠在基於控制台的環境中讀寫數據。 GUI僅用於輸入或顯示數據。 在這種情況下,您可以輕松地為您的目的編程MFC項目。

對於第二個問題,如果您嘗試在響應按鈕按下的情況下在編輯框中顯示從串行端口讀取的數據。 您應該首先將一個變量添加到編輯框中,例如edit_box_value 然后在該按鈕單擊的函數中,實現如下代碼:

edit_box_value.Format(_T("%s"), data_to_be_displayed);
UpdateData(FALSE); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM