在界面切换的时候,我们也可以对界面设置背景,使其看上去更加好看,比如我们在界面的窗口上显示图片,或者显示各种颜色,使其看上去更加美观。这个我们可以在窗口消息里面处理。基于上一个界面切换的函数来继续做。
    创造对话框的时候,就会产生一条WM_PAINT消息,这时候直接让当前窗口显示图片即可达到效果。

在回调函数里面插入wm_paint消息,然后显示图片:

emwin 设置背景色 emwin窗口背景图片_界面切换


因为图片生成的大小不一定刚好和当前窗口的大小匹配,所以我们可以对图片进行放大或缩小处理,使其刚好覆盖整个窗口。就可以用下面那个函数:

GUI_DrawBitmapEx(&bm1589960609737,0,0,200,100,1555,1600);

这个函数,手册里有详细介绍,可以用来缩放图片。第一个参数是图片地址,第2到5个参数,这个例子里的意思是图片的第(200,100)的那个像素点显示在窗口的(0,0,)点,后面两个参数是按比例放大缩小,这个是X轴放大1.555倍,Y轴放大1.6倍。

加入好了之后效果就是这样的:

emwin 设置背景色 emwin窗口背景图片_windows_02


如果其他界面也需要背景,就按这个在另一个窗口的回调函数里面也设置一个背景显示即可,当然,我们也可以把按钮做成透明的,让只有按钮和按钮框名字显示就好。接下里,把这个按钮做成透明的,这样看上去效果更好。

这里可以用回调函数来做,实测可以成功的。

首先,给按钮加入回调函数

emwin 设置背景色 emwin窗口背景图片_显示图片_03


在回调函数里面,需要对其进行设置:

回调函数的代码:

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);
	}
}

因为设置成背景透明的时候,按钮边框也没了,就用画横线的方法画出了按钮的边框,效果一样的:这是效果图,按钮是透明的,可以看到背景。

当然,我觉得按钮透明应该有其他方法的,但是没找到,会的可以评论交流一下啊!!

emwin 设置背景色 emwin窗口背景图片_回调函数_04