首先是对话框的问题,如果是用阻塞型的创建方法,就会阻止后面的函数运行,开始没有明白这一点,我以为反正没有操作系统 ,因此组不组塞都一样,因为没有进程之类的东西,因此,想了个弱智的办法,用while(1)大循环来解决,结果这样就会弹出内存不够,是啊,不停地产生对话框,确实费内存,真傻。后面我又仔细看了看手册,发现有个非阻塞的,这样的确可以了。
然后就是回调函数的问题了,这个还比较方便,有源码可以参考,修改成自己的就行。要注意的首先是理解对话框的运行过程,用
GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
创建出对话框后,由于是非阻塞的,因此窗口的消息循环一直在进行,检测按键的状态变化等。
由于我队友的硬件部分还没有完成,因此,我想先用软件模拟一下示波器,就先试着模拟一下是sin(x)函数。就是申请一段内存,然后将sin函数的数据存入,然后读出来,在绘图区绘出波形。这个问题还算好解决,麻烦的就是示波器的控件,比如Y轴的增益,Y轴方向的平移等。目前先弄出来了简单的功能。
水平方向的平移还没有实现,只实现了Y轴增益变化和Y轴的波形平移。
下面分别是对话框部分的和绘图部分的源码:
/***************************************************************
* 这个文件里的函数完成了波形显示下方的按键面板 *
* *
***************************************************************/
#include <stddef.h>
#include "GUI.H"
#include "DIALOG.h"
//GUI_ID_XX是一个int型的变量
#define GUI_ID_LISTBOX 10
//这个变量用来调节波形在Y轴方向振幅
float YGain;
//这个用来调节Y轴方向的平移
float YMove;
//extern int YGain;
/*********************************************************************
*
* static data
*
**********************************************************************
*/
static U8 _aColorSep[3] = {1, 1, 1}; /* Red, green and blue components */
/*********************************************************************
*
* Initializers for listbox
*/
static const GUI_ConstString _apListBox[] = {
"English", "Deutsch", "France", "Japanese", "Italia", NULL
};
/*********************************************************************
*
* Dialog resource
*
* This table conatins the info required to create the dialog.
* It has been created manually, but could also be created by a GUI-builder.
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Adjust color", 0, 10, 310, 780, 470 , FRAMEWIN_CF_MOVEABLE},
{ TEXT_CreateIndirect, "YGain:" , 0, 5, 20, 35, 20, TEXT_CF_LEFT },
{ TEXT_CreateIndirect, "XGain:", 0, 5, 50, 35, 20, TEXT_CF_LEFT },
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 40, 20, 100, 20 },
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER1, 40, 50, 100, 20 },
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER2, 40, 80, 100, 20 },
{ EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, 145, 20, 30, 20, 0, 3 },
{ EDIT_CreateIndirect, NULL, GUI_ID_EDIT1, 145, 50, 30, 20, 0, 3 },
{ EDIT_CreateI