UCGUI无效窗口和重绘的过程

1、 使窗口无效后,会引起窗口重绘。

WM_InvalidateWindow (W1);//使得窗口无效

//①判断窗口句柄是否有效
//②判断窗口是否无效
//③判断当前窗口的顶级父窗体是否是桌面窗体。
//①②③都是就调入下面函数。

->WM_InvalidateRect(hWin, NULL);

//①各种判断
//②计算出窗口的区域
//③标志窗口无效
//④无效窗口加1

-->WM__Invalidate1Abs(hWin, &r);

2、 重绘过程

int GUI_Exec(void)
->int GUI_Exec1(void)
-->if (WM_Exec())
--->while (WM_Exec1())
---->_DrawNext();
------>if (WM__Paint(iWin, pWin))
//①计算出无效区域和判断顶层父窗体是否是桌面窗体。	
//②判断是否使用存储设备	
------->WM__PaintWinAndOverlays(&Info);
-------->_Paint1(hWin, pWin);//①剪切处理后调用回调函数重绘

3、测试代码

static WM_HWIN W1;
static GUI_PID_STATE State;
static WM_MESSAGE pMsg;

uint8_t num = 0;
uint8_t x,y;
GUI_COLOR Color=GUI_WHITE;
extern const GUI_FONT GUI_FontHZ16;
static void cbW1( WM_MESSAGE* pMsg) 
{
	 switch(pMsg->MsgId)
	 {
	 	case WM_PAINT:
		GUI_SetBkColor(Color);	//设置背景色
		GUI_Clear();
		GUI_SetColor(GUI_BLACK);	  //设置前景色
		GUI_SetFont(&GUI_Font24_ASCII);
		GUI_DispDecAt(num++,10,35,3);
		return ;
		default:
    	WM_DefaultProc(pMsg);
	 }
}
void ucgui_m_wm_call_back(void)
{
	uint8_t x1=10,y1=10;
	
    State.x=x1;
	State.y=y1;
	State.Pressed=1;
	W1 = WM_CreateWindow(10, 10, 100, 100, WM_CF_SHOW, cbW1, 0);
	while(1)  
	{
		GUI_Exec();	
		WM_InvalidateWindow (W1);
		GUI_OnlyDelay(1000);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值