分类: C/C++
2012-05-12 13:14:54
现在正在帮一个大四的哥们做毕业设计。需要设计一个MFC程序。实现的功能是实现和GSM模块的通信。也就是能够通过这个程序来收发短信。这个功能很简单,短信的内容也是实现约定好的ASCII码(因为最终与GSM通信的不是手机,而是MCU控制的GSM模块),没有实现中文短信的功能。
编写的过程就是用VC++(我用的是VC6SP6)编写一个基于对话框的应用程序,在对话框里面添加MSComm控件,实现程序控制电脑串口的功能。程序界面大致如下:
实际运行的时候发现,这个程序只能运行在固定的串口号上面,如果把模块插在不同的usb口(串口号发生改变),这个程序就运行不正常了。所以我就想在程序里面添加一个选择串口号的功能。
实现的方法如下:
1. 插入—>资源打开插入资源对话框,在里面选择dialog,然后点击新建,就会出现一个dialog资源。
2. 双击这个资源,会出现让你添加一个类,这样添加一个类即可。
3. 修改这个新建资源的界面,如下:
然后再在父窗口里面的OnInitDialog()函数里面添加这样的代码:
// TODO: Add extra initialization here
CChoseCom dlg; //CchoseCom是你新建资源添加的类的类名,父类是Cdialog
dlg.DoModal();
这样再编译一下(可能需要添加一下头文件,就include一下即可),运行结果会先出现这个串口选择对话框。当然组合框的下拉列表内还没有内容。所以下一步就是要添加内容。
4. 在组合框里面添加选项。首先打开类向导,在里面选择Message Maps选项页。在里面现在CchoseCom类,控件ID是IDC_COMBO1(组合框控件),分别选择消息CBN_DROPDOWN和CBN_SELCHANGE添加消息响应函数。CBN_DROPDOWN是当点击组合框的倒黑色小三角是触发的消息,CBN_SELCHANGE是选择好组合框的一个选项后触发的消息。然后在CBN_DROPDOWN响应函数里面就可以添加组合框列表的内容:
m_chosecom.AddString("COM1");
m_chosecom.AddString("COM2");
m_chosecom.AddString("COM3");
m_chosecom.AddString("COM4");
m_chosecom.AddString("COM5");
m_chosecom.AddString("COM6");
m_chosecom.AddString("COM7");
m_chosecom.AddString("COM8");//m_chosecom是用类向导添加的CcomboBox类对象,对于与IDC_COMBO1。这样当选择倒三角后就可以显示组合框内容了。在CBN_SELCHANGE响应函数里面添加:
com_num=m_chosecom.GetCurSel();//com_num是在类CchoseCom里面添加的int型变量
5. 再在类CChoseCom里面添加一个int型public的函数PopComNum()函数体如下:
int CChoseCom::PopComNum()
{
return com_num;
}
6. 然后在负类里面调用PopComNum()函数就可以获得选择的串口的值
到这里功能就已经实现了。运行程序的时候首先弹出一个模态对话框,让我们选择串口,选择完后点击确定,这样父窗口就出现,然后就可以正常的运行了。呵呵,这个功能我想了老半天,结果实现起来原来这么简单!!