在界面切换的时候,我们也可以对界面设置背景,使其看上去更加好看,比如我们在界面的窗口上显示图片,或者显示各种颜色,使其看上去更加美观。这个我们可以在窗口消息里面处理。基于上一个界面切换的函数来继续做。
创造对话框的时候,就会产生一条WM_PAINT消息,这时候直接让当前窗口显示图片即可达到效果。
在回调函数里面插入wm_paint消息,然后显示图片:
因为图片生成的大小不一定刚好和当前窗口的大小匹配,所以我们可以对图片进行放大或缩小处理,使其刚好覆盖整个窗口。就可以用下面那个函数:
GUI_DrawBitmapEx(&bm1589960609737,0,0,200,100,1555,1600);
这个函数,手册里有详细介绍,可以用来缩放图片。第一个参数是图片地址,第2到5个参数,这个例子里的意思是图片的第(200,100)的那个像素点显示在窗口的(0,0,)点,后面两个参数是按比例放大缩小,这个是X轴放大1.555倍,Y轴放大1.6倍。
加入好了之后效果就是这样的:
如果其他界面也需要背景,就按这个在另一个窗口的回调函数里面也设置一个背景显示即可,当然,我们也可以把按钮做成透明的,让只有按钮和按钮框名字显示就好。接下里,把这个按钮做成透明的,这样看上去效果更好。
这里可以用回调函数来做,实测可以成功的。
首先,给按钮加入回调函数
在回调函数里面,需要对其进行设置:
回调函数的代码:
static void _cbButton1(WM_MESSAGE * pMsg)
{
WM_HWIN hWin;
GUI_RECT Rect;
hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_PAINT:
WM_GetClientRect(&Rect);
if (BUTTON_IsPressed(hWin)) //如果按下,按下后的状态
{
GUI_SetColor(GUI_YELLOW);
GUI_FillRoundedRect(Rect.x0, Rect.y0, Rect.x1, Rect.y1, 0);
GUI_SetBkColor(GUI_DARKGRAY);
GUI_SetColor(GUI_BLUE);
}
else //没有按下时的状态
{
GUI_SetAlpha(255);
GUI_SetAlpha(0);
GUI_DrawLine(Rect.x0, Rect.y0, Rect.x1, Rect.y0);
GUI_DrawLine(Rect.x0, Rect.y0, Rect.x0, Rect.y1);
GUI_DrawLine(Rect.x0, Rect.y1, Rect.x1, Rect.y1);
GUI_DrawLine(Rect.x1, Rect.y0, Rect.x1, Rect.y1);
}
GUI_SetTextMode(GUI_TM_TRANS);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringInRect("LED1", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER);
break;
default:
BUTTON_Callback(pMsg);
}
}
因为设置成背景透明的时候,按钮边框也没了,就用画横线的方法画出了按钮的边框,效果一样的:这是效果图,按钮是透明的,可以看到背景。
当然,我觉得按钮透明应该有其他方法的,但是没找到,会的可以评论交流一下啊!!