繁体   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