|
本帖最后由 yaowang_hao 于 2024-11-29 14:50 编辑
我用的STM32F407开发板,学习BUTTON控件,用FrameWin 控件可以实现BUTTON显示,但是按照安富莱示波器例程中直接设置BUTTON方法来写程序就显示不出BUTTON,希望大神们给看看哪里有问题。源码如下:
/******************************************************************************* * 函数 ******************************************************************************/
/*********************************************************************** Defines************************************************************************/
#define WM_HBKWIN WM_GetDesktopWindow()
/* Handle of background window */
/*********************************************************************** Static data************************************************************************/
/*数据对象句柄*/GRAPH_DATA_Handle Graphdata;
/* 3个按钮句柄 */
BUTTON_Handle hButton0;
BUTTON_Handle hButton1;
BUTTON_Handle hButton2;
/*************变量定义******************/
uint8_t hWinRunStopFlag = 1; /* 1:表示运行,0:表示暂停 */
uint16_t g_usRefPos = 20; /* 左侧的参考位置,默认开机后是中间位置 */
/* 用于函数GUI_MEMDEV_Draw的调用 */
typedef struct { uint16_t *aY;} PARAM;/* 波形显示区左侧边上波形显示的参考位置 */
const GUI_POINT aPoints[5] = { { 0, -10}, { 22, -10}, { 32, 0}, { 22, 10}, { 0, 10}};
/* 声明一个矩形方框 */GUI_RECT Rect ={DSOSCREEN_STARTX, DSOSCREEN_STARTY, DSOSCREEN_ENDX, DSOSCREEN_ENDY};
/**********调用外部变量****************/
extern __IO uint16_t ADC_ConvertedValue;
/*********************************************************************** Static data************************************************************************/
extern const char Framewin_text[];extern const char text1[];extern const char text2[];
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
#define ID_BUTTON_2 (GUI_ID_USER + 0x03)
/**************GUI_RECT类型数组********************/
GUI_RECT lClient = {0, 0, 479, 39}; /* 用于显示波形纵轴坐标代表什么 */
GUI_RECT StateMode = {370, 0, 470, 39}; /* 用于显示运行状态,运行和暂停 */
GUI_RECT lRefPos = {0, 40, 39, 339}; /* 最左侧波形纵轴参考的位置区域 */
GUI_RECT RunMode = {370, 44, 470, 94}; /* 最右侧波形纵轴参考的位置区域 */
GUI_RECT StopMode = {370, 124, 470, 174};
GUI_RECT SaveMode = {370, 204, 470, 254};
void DRAW_init(void){
uint16_t x; uint16_t y; /* 第1步:刷新背景*********************************************************************/
GUI_SetBkColor(GUI_WHITE);
GUI_Clear();
/* 第2步:显示基本的信息***************************************************************/
GUI_SetColor(GUI_BLACK);
GUI_SetFont(&GUI_Font8x16x1x2);
GUI_DispStringInRect("(p)", &lClient, GUI_TA_HCENTER | GUI_TA_VCENTER);
/*3 :设置波形显示运行或暂停 */
if(hWinRunStopFlag == 1)
{
GUI_SetColor(GUI_GREEN);
GUI_DispStringInRect("Run", &StateMode, GUI_TA_HCENTER | GUI_TA_VCENTER);
}
else
{
GUI_SetColor(GUI_RED);
GUI_DispStringInRect("Stop", &StateMode, GUI_TA_HCENTER | GUI_TA_VCENTER);
}
/* 第4步:波形显示区的边框*************************************************************/
GUI_SetColor(0XEBCD9E);
GUI_DrawRect(DSOSCREEN_STARTX - 1, /* Upper left X-position. */
DSOSCREEN_STARTY - 1, /* Upper left Y-position. */
DSOSCREEN_ENDX + 1, /* Lower right X-position. */
DSOSCREEN_ENDY + 1); /* Lower right Y-position. */
GUI_SetColor(0XB37F63);
GUI_DrawRect(DSOSCREEN_STARTX - 2, /* Upper left X-position. */
DSOSCREEN_STARTY - 2, /* Upper left Y-position. */
DSOSCREEN_ENDX + 2, /* Lower right X-position. */
DSOSCREEN_ENDY + 2); /* Lower right Y-position. */
/*******绘制虚线背景********************************/
GUI_SetBkColor(GUI_BLACK);
GUI_ClearRect(DSOSCREEN_STARTX, /* Upper left X-position. */
DSOSCREEN_STARTY, /* Upper left Y-position. */
DSOSCREEN_ENDX, /* Lower right X-position. */
DSOSCREEN_ENDY); /* Lower right Y-position. */
// GUI_SetColor(GUI_WHITE);
/* 绘制水平刻度点 */
for (y = 0; y < 6; y++)
{
for (x = 0; x < 36; x++)
{
GUI_DrawPoint(DSOSCREEN_STARTX + (x * 10), DSOSCREEN_STARTY + (y * 50));
}
}
for (x = 0; x < 36; x++)
{
GUI_DrawPoint(DSOSCREEN_STARTX + (x * 10), DSOSCREEN_ENDY);
}
/* 绘制垂直刻度点 */
for (x = 0; x < 5; x++)
{
for (y = 0; y < 30; y++)
{
GUI_DrawPoint(DSOSCREEN_STARTX + (x * 90), DSOSCREEN_STARTY + (y * 10));
}
}
/* 第5步:创建需要的按钮*************************************************************/
hButton0 = BUTTON_Create(370, 44, 100, 50, GUI_ID_BUTTON0, WM_CF_SHOW);
BUTTON_SetText(hButton0, "RUN");
BUTTON_SetFont(hButton0, &GUI_Font20B_ASCII);
hButton1 = BUTTON_Create(370, 124, 100, 50, GUI_ID_BUTTON1, WM_CF_SHOW);
BUTTON_SetText(hButton1, "STOP");
BUTTON_SetFont(hButton1, &GUI_Font20B_ASCII);
hButton2 = BUTTON_Create(370, 204, 100, 50, GUI_ID_BUTTON2, WM_CF_SHOW);
BUTTON_SetText(hButton2, "SAVE"); BUTTON_SetFont(hButton2, &GUI_Font20B_ASCII);
/* 第6步:显示参考坐标*************************************************************/
GUI_SetColor(GUI_YELLOW);
GUI_FillPolygon(&aPoints[0], GUI_COUNTOF(aPoints), 5, g_usRefPos);
GUI_SetColor(GUI_BLACK); GUI_SetFont(&GUI_Font24_ASCII);
GUI_SetTextMode(GUI_TEXTMODE_TRANS);
GUI_DispCharAt('1', 10, g_usRefPos - 10);}
/** * @brief 对话框回调函数 * @note 无 * @param pMsg:消息指针 * @retval 无 */
static void _cbBkWin(WM_MESSAGE* pMsg)
{
WM_HWIN hWin;
int NCode, Id;
hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
/* 桌面背景重绘 */
case WM_PAINT:
DRAW_init();
break;
case WM_TIMER:
break;
case WM_INIT_DIALOG:
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch (Id)
{
/* 按钮0:界面运行 */
case GUI_ID_BUTTON0:
switch(NCode)
{
case WM_NOTIFICATION_RELEASED:
hWinRunStopFlag = 1;
break;
}
break;
/* 按钮1:打开Inspector对话框 */
case GUI_ID_BUTTON1:
switch(NCode)
{
case WM_NOTIFICATION_RELEASED:
hWinRunStopFlag = 0;
break;
}
break;
/* 按钮2:打开Acquire对话框 */
case GUI_ID_BUTTON2:
switch(NCode)
{
case WM_NOTIFICATION_RELEASED:
break;
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
WM_HWIN CreateFramewin(void);
WM_HWIN CreateFramewin(void)
{
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0); return hWin;}
/** * @brief GUI主任务 * @note 无 * @param 无 * @retval 无 */
void MainTask(void)
{ /* 启用UTF-8编码 */
// GUI_UC_SetEncodeUTF8();
/* 创建字体 */
// Create_XBF_Font();
WM_SetCreateFlags(WM_CF_MEMDEV);
/* 创建窗口 */
// CreateFramewin();
WM_SetCallback(WM_HBKWIN, _cbBkWin);
/* 初始化 界面 */
DRAW_init();
while(1)
{
/* 向GRAPH数据对象添加数据 */
GUI_Delay(30);
}
}/*************************** End of file ****************************/
|
|