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);
	}
}
上一篇:ORA-22922:nonexistent LOB value问题及listagg()函数


下一篇:SAP WM LQ02 为供应商寄售库存去K的时候,如果有Open TO单,则不能成功为物料去K?